带有“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中文网其他相关文章!