JSON对象中的项目是否使用"json.dumps"乱序了? [英] Items in JSON object are out of order using "json.dumps"?
问题描述
我正在使用json.dumps
转换成json之类的
I'm using json.dumps
to convert into json like
countries.append({"id":row.id,"name":row.name,"timezone":row.timezone})
print json.dumps(countries)
我得到的结果是:
[
{"timezone": 4, "id": 1, "name": "Mauritius"},
{"timezone": 2, "id": 2, "name": "France"},
{"timezone": 1, "id": 3, "name": "England"},
{"timezone": -4, "id": 4, "name": "USA"}
]
我想按以下顺序获取密钥:id,名称,时区-但是我有timezone,id,名称.
I want to have the keys in the following order: id, name, timezone - but instead I have timezone, id, name.
我该如何解决?
推荐答案
Python dict
(在Python 3.7之前)和JSON对象都是无序集合.您可以传递sort_keys
参数来对键进行排序:
Both Python dict
(before Python 3.7) and JSON object are unordered collections. You could pass sort_keys
parameter, to sort the keys:
>>> import json
>>> json.dumps({'a': 1, 'b': 2})
'{"b": 2, "a": 1}'
>>> json.dumps({'a': 1, 'b': 2}, sort_keys=True)
'{"a": 1, "b": 2}'
如果您需要特定的订单;您可以使用collections.OrderedDict
:
If you need a particular order; you could use collections.OrderedDict
:
>>> from collections import OrderedDict
>>> json.dumps(OrderedDict([("a", 1), ("b", 2)]))
'{"a": 1, "b": 2}'
>>> json.dumps(OrderedDict([("b", 2), ("a", 1)]))
'{"b": 2, "a": 1}'
自Python 3.6起,保留了关键字参数顺序,并且可以使用更好的语法重写以上内容:
Since Python 3.6, the keyword argument order is preserved and the above can be rewritten using a nicer syntax:
>>> json.dumps(OrderedDict(a=1, b=2))
'{"a": 1, "b": 2}'
>>> json.dumps(OrderedDict(b=2, a=1))
'{"b": 2, "a": 1}'
请参见 PEP 468 –保留关键字参数顺序.
如果您的输入是以JSON形式提供的,那么为了保留顺序(获取OrderedDict
),您可以传递object_pair_hook
,
If your input is given as JSON then to preserve the order (to get OrderedDict
), you could pass object_pair_hook
, as suggested by @Fred Yankowski:
>>> json.loads('{"a": 1, "b": 2}', object_pairs_hook=OrderedDict)
OrderedDict([('a', 1), ('b', 2)])
>>> json.loads('{"b": 2, "a": 1}', object_pairs_hook=OrderedDict)
OrderedDict([('b', 2), ('a', 1)])
这篇关于JSON对象中的项目是否使用"json.dumps"乱序了?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!