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

回到顶部