使用json.load读取配置文件后,如何保留原有键值对顺序?
解决方案:保留JSON配置文件的原有键顺序
要解决读取和写入.config文件时保留手动设置的键顺序问题,可以通过以下步骤实现:
1. 读取文件时保留原有顺序
使用json.load()的object_pairs_hook参数,传入collections.OrderedDict,让JSON解析器直接按文件中的键顺序生成有序字典:
from collections import OrderedDict import json # 读取配置文件 with open(config_file_path_name, 'r') as i: self.contents_dict = json.load(i, object_pairs_hook=OrderedDict)
这个钩子会捕获JSON对象解析时的键值对顺序,直接构建OrderedDict,完美保留你手动设置的字段顺序。
2. 写入文件时维持顺序
写入文件时,确保json.dump()的sort_keys参数设为False(默认值为False,显式声明更稳妥),这样会按OrderedDict的顺序写入内容:
# 写入配置文件 with open(config_file_path_name, 'w') as o: json.dump(self.contents_dict, o, indent=2, sort_keys=False)
indent=2是为了保持你手动格式化的缩进风格,和示例中的格式一致。
补充说明
- 若使用Python 3.7及以上版本,CPython的普通字典已原生支持插入顺序保留。此时无需使用OrderedDict,直接用
json.load()读取,写入时设置sort_keys=False即可保留文件原有顺序,但OrderedDict的写法能兼容更低版本的Python,通用性更强。 - 注意JSON标准要求使用双引号,你的示例中用了单引号,虽然Python的
json.load()可能可以解析,但建议统一使用双引号避免潜在问题。
内容的提问来源于stack exchange,提问作者Guillermo Aguero
相关产品推荐
相关产品推荐

