JSON对象中的项目使用“ json.dumps”乱序了吗?

json.dumps用来转换成json之类的

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,名称,时区-但我却拥有时区,ID,名称。

我该如何解决?

回答:

Python dict(在Python 3.7之前)和JSON对象都是无序集合。您可以传递sort_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

>>> 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}'

从Python3.6开始,关键字参数顺序得以保留,并且可以使用更好的语法重写以上内容:

>>> 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, 通过@FredYankowski的建议:

>>> 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”乱序了吗? 的全部内容, 来源链接: utcz.com/qa/419489.html

回到顶部