python - json.dumps 打乱了顺序

标签 python json

我正在使用 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/

相关文章:

json - 我如何将 JSON 格式与 flutter 一起使用?帮助使用 Gamebanana api

python - 如何将Figure对象转换为具有RGBA值的Numpy数组?

python - 有没有办法接受 '%' 作为输入的一部分,在 python 2.6 和 3.0 中都有效?

python - python中Popen的性能开销是多少

php - org.json.JSONException : Value <html of type java. lang.String 无法转换为 JSONObject

Node.js 的 Json 解析问题

php - 从其中一个属性具有 $ 符号的对象获取 php 变量

python迷宫递归不递归

python - python中的蓝牙编程

javascript - 将变量从 javascript 传递到 JSON POST - 获取非法 token