使用“json.dumps”函数转换 Python 时会出现 JSON 对象中无序键的问题字典转换为 JSON 格式,导致意外的排序。出现这种情况是因为 Python 字典和 JSON 对象都缺乏固有的排序。
为了解决这个问题,可以在“json.dumps”中使用“sort_keys”参数来按字母升序对键进行排序。这是一个示例:
<code class="python">import json countries = [ {"id": 1, "name": "Mauritius", "timezone": 4}, {"id": 2, "name": "France", "timezone": 2}, {"id": 3, "name": "England", "timezone": 1}, {"id": 4, "name": "USA", "timezone": -4} ] print(json.dumps(countries, sort_keys=True))</code>
这会产生带有排序键的所需输出:
<code class="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} ]</code>
另一个选项涉及使用“collections.OrderedDict”类,它维护键的顺序 -值对。下面是一个示例:
<code class="python">from collections import OrderedDict countries = OrderedDict([ ("id", 1), ("name", "Mauritius"), ("timezone", 4) ]) print(json.dumps(countries))</code>
这也会产生有序的 JSON 输出:
<code class="json">{"id": 1, "name": "Mauritius", "timezone": 4}</code>
从 Python 3.6 开始,默认情况下会保留关键字参数顺序,从而提供了一种更简化的方法实现所需的顺序:
<code class="python">countries = { "id": 1, "name": "Mauritius", "timezone": 4 } print(json.dumps(countries))</code>
最后,如果您的输入以 JSON 形式提供,则可以在“json.loads”中使用“object_pairs_hook”参数将顺序保留为“OrderedDict”:
<code class="python">json_input = '{"a": 1, "b": 2}' ordered_dict = json.loads(json_input, object_pairs_hook=OrderedDict) print(ordered_dict)</code>
这可确保键值对保持在 JSON 输入中提供的原始顺序。
以上是使用'json.dumps”转换 Python 字典时,如何控制 JSON 对象中键的顺序?的详细内容。更多信息请关注PHP中文网其他相关文章!