首页  >  文章  >  后端开发  >  为什么 JSON 输出中的键顺序与使用“json.dumps”的 Python 字典中的顺序不同?

为什么 JSON 输出中的键顺序与使用“json.dumps”的 Python 字典中的顺序不同?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-27 21:08:01779浏览

Why is the order of keys in my JSON output different from the order in my Python dictionary using `json.dumps`?

带有“json.dumps”的 JSON 对象中的无序项?

在您的代码中,您使用的是“json” .dumps”将字典列表转换为 JSON。但是,您已经注意到每个字典中键的顺序与预期不符。具体来说,您需要键以“id”、“name”和“timezone”的顺序出现。

推理

两个Python字典(在Python之前) 3.7) 和 JSON 对象是无序集合。这意味着字典或 JSON 对象中键的顺序无法保证。

解决方案 1:对键进行排序

您可以使用 "sort_keys" 参数“json.dumps”对输出 JSON 中的键进行排序。例如:

<code class="python">import json

countries.append({"id":row.id,"name":row.name,"timezone":row.timezone})
print(json.dumps(countries, sort_keys=True))</code>

这将按以下顺序输出带有键的 JSON:

[
   {"id": 1, "name": "Mauritius", "timezone": 4}, 
   {"id": 2, "name": "France", "timezone": 2}, 
   {"id": 3, "name": "England", "timezone": 1}, 
   {"id": 4, "name": "USA", "timezone": -4}
]

解决方案 2:使用 OrderedDict

如果您需要键的特定顺序,可以使用“collections.OrderedDict”类。 OrderedDict 保留插入其中的键的顺序。例如:

<code class="python">from collections import OrderedDict

countries_by_id = OrderedDict()
countries_by_id["id"] = row.id
countries_by_id["name"] = row.name
countries_by_id["timezone"] = row.timezone

print(json.dumps(countries_by_id))</code>

这将输出 JSON,其中键按“id”、“name”和“时区”的顺序排列。

附加说明

在 Python 3.6 及更高版本中,关键字参数的顺序保留在字典中。这意味着您只需在创建字典时按所需顺序指定键即可获得与使用 OrderedDict 相同的结果:

<code class="python">countries = {"id": row.id, "name": row.name, "timezone": row.timezone}</code>

这将自动保留输出 JSON 中键的顺序。

以上是为什么 JSON 输出中的键顺序与使用“json.dumps”的 Python 字典中的顺序不同?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn