我正在使用 json module创建 json
包含类似条目的文件
json.dumps({"fields": { "name": "%s", "city": "%s", "status": "%s", "country": "%s" }})
然而,在
json
-file 创建的字段顺序错误{"fields": {"status": "%s", "city": "%s", "name": "%s", "country": "%s"}}
这是一个问题,因为
%s
的替换- 字符串现在不正确。如何强制
dumps
保持给定顺序的功能?
最佳答案
与其他正确答案一样,在 Python 3.6 之前,字典是无序的。
也就是说,JSON is also supposed to have unordered mappings ,因此原则上将有序字典存储在 JSON 中没有多大意义。具体来说,这意味着在读取 JSON 对象时,返回键的顺序可以是任意的。
因此,在 JSON 中保留映射顺序(如 Python OrderedDict)的一种好方法是输出一个(键、值)对数组,在读取时将其转换回有序映射:
>>> 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
(注意有序字典是从 (key, value) 对的列表中构造的:
OrderedDict({1: 10, 2: 20})
不起作用:它的键不一定像字典文字那样有序,因为文字创建了一个 Python 字典,其键是无序的.)PS : 从 Python 3.1 开始,json 模块 offers a hook用于自动将一对列表(如上)转换为其他东西,如 OrderedDict。
关于python - json.dumps 打乱了顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53223631/