【发布时间】:2022-01-02 23:37:31
【问题描述】:
我在 JSON 值中更新了一个新的 JSON 键值,但是当我写入 JSON 文件的顺序时发生了变化,那么如何用新的更新键值得到我原来的顺序?
原始 JSON 格式:
value = [
{
"result": [
{
"allow": "notes",
"url": "https://google.com",
"np_url": "https://www.google.com/downloads/",
"rank": "2"
"info": "ok"
},
{
"allow": "notes2",
"url": "https://www.yahoo.com",
"np_url": "https://imp.com/download",
"rank": "7",
"info": "cancel"
},
]
}
]
当我添加新的键和值时,我编写 JSON 时顺序会发生变化。
打印值显示原始值,但是当我编写和使用sort_keys = True 并且没有sort_keys = True 时,它也会得到不同的JSON 格式顺序
代码:
if
....
kk['art'] = pencil
else
...
kk['art'] = pencil
print(value)
import json
with open("example.json", "w", encoding='utf-8') as f:
json.dump(value, f, ensure_ascii=False,indent=4, sort_keys=True)
输出:
value = [
{
"result": [
{
"allow": "notes",
"art": "pencil",
"url": "https://google.com",
"info": "ok"
"np_url": "https://www.google.com/downloads/",
"rank": "2"
},
{
"allow": "notes2",
"art": "pen",
"url": "https://www.yahoo.com",
"info": "cancel"
"np_url": "https://imp.com/download",
"rank": "7",
},
]
}
]
预期输出:
value = [
{
"result": [
{
"allow": "notes",
"art": "pencil",
"url": "https://google.com",
"np_url": "https://www.google.com/downloads/",
"rank": "2"
"info": "ok"
},
{
"allow": "notes2",
"art": "pen",
"url": "https://www.yahoo.com",
"np_url": "https://imp.com/download",
"rank": "7",
"info": "cancel"
},
]
}
]
【问题讨论】:
-
如果你想保留订单你需要停止做
sort_keys=True -
您需要使用您想要的键的自定义顺序创建整个字典。但是你知道顺序与 JSON 无关吧?
-
创建整个字典,不要使用
sort_keys=True。我以为最后一个被理解了。 -
字典保持键的顺序(3.7+)。您将键添加到字典的顺序是您将看到它们呈现的顺序。如果您添加一个新密钥,它将是最后一个。如果您需要指定字典中键的顺序,您必须自己按该顺序插入它们。如果您必须重新排序键(出于某种原因),您可以使用
sorted()在items()上创建一个新字典,您可以在其中控制排序功能。 -
@Angeline 你用的是什么版本的 Python?我无法重现您使用 Python 3.7 获得的输出,相反,我得到了原始结构的顺序,
"art"出现在末尾。
标签: python json python-3.x