сортировать элементы в json_util_dumps в обработчике Tornado - PullRequest
0 голосов
/ 18 октября 2018

Я хотел бы вывести как показано ниже (упорядочено как в моем скрипте).

{"data": [
    { "cid": "CG138712",
      "mac": "24-A4-3C-F6-51-21",
      "category": "CPE- E",
      "last_seen": "2017-12-11 12:42:10",                                                 
       "cpe-o": {"cid": "CS247314",
                 "mac":"80-2A-A8-7E-1D-8E",
                 "category": "CPE-O", 
                 "last_seen": "2018-05-14 15:28:42", 
               }
    }]
}

Но мой код сохраняет вывод таким образом.

{"data": [
        { "cid": "CG138712",
          "category": "CPE- E",                                                 
           "cpe-o": {"cid": "CS247314",
                     "last_seen": "2018-05-14 15:28:42", 
                     "category": "CPE-O", 
                     "mac":"80-2A-A8-7E-1D-8E"   
                   }
            "mac": "24-A4-3C-F6-51-21",
            "last_seen": "2017-12-11 12:42:10",
        }]
    }

Вот как я реализую свой сценарий!

    cpeo_dict = dict(......)  
    doc = {"cid": document['cid'],"mac": document['mac'],"category": document['category'],"last_seen": document['last_seen'].strftime("%Y-%m-%d %H:%M:%S"),"cpe-o": cpeo_dict}
   docs_uplink.append(doc)
   dumped = json_util.dumps(dict(data=docs_uplink))

Я не могу найти, как добавить параметры в функцию json_util.dumps, я нашел только sort и OrderedDict из json.dumps.

1 Ответ

0 голосов
/ 18 октября 2018

Словари Python не сохраняют порядок.Для сохранения порядка в диктантах существует специальный класс - collections.OrderedDict.Вместо использования dict необходимо использовать OrderedDict.

Пример:

from collections import OrderedDict

doc = OrderedDict([
    ('cid', document['cid']),
    ('mac', document['mac']),
    ('category', document['category']),
    # ... other keys ...
])

docs_uplink.append(doc)
dumped = json_util.dumps(dict(data=docs_uplink))
...