首页 > 解决方案 > 在 Tornado 处理程序中对 json_util_dumps 中的项目进行排序

问题描述

我想输出如下(在我的脚本中排序)。

{"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 函数中添加参数,我只找到了 json.dumps 的 sort 和 OrderedDict。

标签: pythonjsontornado

解决方案


Python 字典不保留顺序。有一个特殊的类用于保留 dicts 中的顺序 - collections.OrderedDictdict您需要使用 ,而不是使用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))

推荐阅读