如何用Python基于update.json更新config.json文件?
如何用Python根据update.json更新config.json中的嵌套键值对?
没问题,这个需求完全可以用Python实现!既然你提到update.json里的所有键都是唯一的,那我们只需要写一个递归遍历的函数,去config.json的嵌套结构里找到对应键,然后替换它的值就好。
先看一下你的示例文件内容:
示例文件
config.json
{ "glossary": { "title": "example glossary", "GlossDiv": { "title": "S", "GlossList": { "GlossEntry": { "ID": "SGML", "SortAs": "SGML", "GlossTerm": "Standard Generalized Markup Language", "Acronym": "SGML", "Abbrev": "ISO 8879:1986", "GlossDef": { "para": "A meta-markup language, used to create markup languages such as DocBook.", "GlossSeeAlso": ["GML", "XML"] }, "GlossSee": "markup" } } } }
update.json
{"ID": "ABC", "GlossSeeAlso": ["ABC", "DEF"] }
Python实现代码
下面是完整的实现代码,我会一步步解释:
import json def update_nested_dict(data, updates): """递归遍历字典,更新匹配的键值对""" for key, value in data.items(): if key in updates: # 找到匹配的键,替换值 data[key] = updates[key] # 如果当前值是字典,继续递归遍历深层结构 elif isinstance(value, dict): update_nested_dict(value, updates) return data # 加载config.json和update.json文件内容 with open('config.json', 'r') as f: config_data = json.load(f) with open('update.json', 'r') as f: update_data = json.load(f) # 执行更新操作 updated_config = update_nested_dict(config_data, update_data) # 将更新后的内容写入新文件(也可以直接覆盖原config.json) with open('updated_config.json', 'w') as f: json.dump(updated_config, f, indent=2) # 打印结果验证 print(json.dumps(updated_config, indent=2))
代码解释
- 递归函数
update_nested_dict:核心逻辑都在这里,它会逐层遍历字典,每遇到一个键就检查是否在更新列表里,如果匹配就替换对应的值;如果当前值还是嵌套的字典,就继续递归进去查找,确保能处理任意深度的嵌套结构。 - 加载JSON文件:用
json.load()把两个JSON文件的内容转换成Python字典,方便后续操作。 - 执行更新:调用递归函数,把config字典和更新字典传入,完成键值替换。
- 保存结果:用
json.dump()把更新后的字典写入文件,indent=2参数是为了让输出的JSON格式更工整,方便阅读。
执行结果
运行代码后,你会得到符合预期的更新结果:
{ "glossary": { "title": "example glossary", "GlossDiv": { "title": "S", "GlossList": { "GlossEntry": { "ID": "ABC", "SortAs": "SGML", "GlossTerm": "Standard Generalized Markup Language", "Acronym": "SGML", "Abbrev": "ISO 8879:1986", "GlossDef": { "para": "A meta-markup language, used to create markup languages such as DocBook.", "GlossSeeAlso": [ "ABC", "DEF" ] }, "GlossSee": "markup" } } } } }
这个方案的前提是你保证update.json里的键都是唯一的,不会出现多个相同键在不同层级的情况,这样就不会有更新冲突啦。
内容的提问来源于stack exchange,提问作者user1536782
相关产品推荐
相关产品推荐

