json.dumps弄乱顺序
我正在使用json模块创建一个json
包含类似条目的文件
json.dumps({"fields": { "name": "%s", "city": "%s", "status": "%s", "country": "%s" }})
但是,在json
创建的-file文件中,字段顺序错误
{"fields": {"status": "%s", "city": "%s", "name": "%s", "country": "%s"}}
这是一个问题,因为%s
-strings的替换现在不正确。
如何强制dumps
功能保持给定顺序?
回答:
像其他答案正确指出的那样,在Python 3.6之前,字典是 无序的 。
就是说,JSON还应该具有 _无序_映射,因此原则上在JSON中存储有序字典没有多大意义。具体来说,这意味着在读取JSON对象时,返回键的顺序可以是任意的。
因此,在JSON中保留映射顺序(例如PythonOrderedDict)的一种好方法是输出一个(键,值)对的数组,您在读取时将其转换回有序映射:
>>> from collections import OrderedDict>>> import json
>>> d = OrderedDict([(1, 10), (2, 20)])
>>> print d[2]
20
>>> json_format = json.dumps(d.items())
>>> print json_format # Order maintained
[[1, 10], [2, 20]]
>>> OrderedDict(json.loads(json_format)) # Reading from JSON: works!
OrderedDict([(1, 10), (2, 20)])
>>> _[2] # This works!
20
(请注意,从(键,值)对的 列表 构造有序字典的方式:OrderedDict({1: 10, 2:
20})将不起作用:它的键不一定像字典文字中那样是有序的,因为该文字创建了一个Python字典,其键是无序的。)
:从Python
3.1开始,json模块提供了一个挂钩,用于自动将成对的列表(如上)转换为其他类似OrderedDict的对象。
以上是 json.dumps弄乱顺序 的全部内容, 来源链接: utcz.com/qa/428396.html