更新JSON键值后写入文件时如何保留原有键的顺序?
问题原因
- 你在调用
json.dump时设置了sort_keys=True,该参数的作用是强制将JSON的所有键按字母顺序升序排列,这是导致你输出顺序不符合预期的核心原因。 - 如果你使用的是Python 3.6及更早版本,Python原生的字典不保留插入顺序,也可能导致写入后的键顺序发生变化。
解决方案
步骤1:修改json.dump的参数
删掉sort_keys=True配置,或者显式设置为sort_keys=False,json.dump默认就不会强制对键排序,会保留字典的原始插入顺序。
修改后的写入代码如下:
import json with open("example.json", "w", encoding='utf-8') as f: json.dump(value, f, ensure_ascii=False, indent=4)
步骤2:低版本Python兼容处理
如果你的运行环境是Python 3.6及更早版本,需要用collections.OrderedDict来存储字典对象,保证插入顺序:
- 读取原始JSON时就配置保留顺序:
from collections import OrderedDict import json with open("原始文件路径.json", "r", encoding='utf-8') as f: value = json.load(f, object_pairs_hook=OrderedDict)
- 新增
art键时如果需要调整到指定位置,可以用move_to_end方法调整顺序:
# 假设kk是result数组下的每个OrderedDict对象 kk['art'] = pencil # 把art键移动到allow的后一位 kk.move_to_end('art', last=False) kk.move_to_end('allow', last=False)
做完以上两步就可以保证写入JSON后的键顺序和你预期的一致。
内容的提问来源于stack exchange,提问作者Angeline
相关产品推荐
相关产品推荐

