json.dumps弄乱顺序如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (307)

我正在使用json模块创建一个json包含类似条目的文件

json.dumps({"fields": { "name": "%s", "city": "%s", "status": "%s", "country": "%s" }})

但是,在json创建的文件中,这些字段的顺序是错误的

{"fields": {"status": "%s", "city": "%s", "name": "%s", "country": "%s"}}

这是一个问题,因为%s-string的替换现在是不正确的。

我如何强制该dumps功能保持给定的顺序?

提问于
用户回答回答于

像其他答案一样,Python字典是无序的

也就是说,JSON也应该具有无序映射,所以原则上将有序字典存储在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

(请注意,有序字典是从(键,值)对列表构造而来的:OrderedDict({1: 10, 2: 20})不会工作:它的键不一定按照字典文字排序,因为文字会创建一个键字无序的Python字典。)

用户回答回答于

这是一本字典,字典不保持秩序。你可以使用OrderedDict来代替。

还可以添加sort_keys = False参数:

json.dumps(values, sort_keys=False)

扫码关注云+社区