两者都是Pythondict
(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}'
如果您需要特定订单;你可以use collections.OrderedDict https://docs.python.org/library/collections.html#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开始 https://docs.python.org/3.6/whatsnew/3.6.html#pep-468-preserving-keyword-argument-order,关键字参数顺序被保留,并且可以使用更好的语法重写上面的内容:
>>> json.dumps(OrderedDict(a=1, b=2))
'{"a": 1, "b": 2}'
>>> json.dumps(OrderedDict(b=2, a=1))
'{"b": 2, "a": 1}'
See PEP 468 – 保留关键字参数顺序 https://www.python.org/dev/peps/pep-0468/.
如果您的输入以 JSON 形式给出,那么要保留顺序(以获取OrderedDict
),你可以通过object_pair_hook
, 正如@Fred Yankowski 所建议的 https://stackoverflow.com/questions/10844064/items-in-json-object-are-out-of-order-using-json-dumps/23820416#comment62431021_23820416:
>>> 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)])