我正在使用json.dumps转换为 json 之类的
json.dumps
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、name、timezone - 但我有 timezone、id、name。
我应该如何解决这个问题?
Python dict(Python 3.7 之前)和 JSON 对象都是无序集合。您可以传递sort_keys参数,对键进行排序:
dict
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:
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 开始,保留了关键字参数顺序,并且可以使用更好的语法重写上述内容:
>>> 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),您可以通过@Fred Yankowski 的object_pair_hook建议 :
OrderedDict
object_pair_hook
>>> 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)])