如何在Python中合并两个JSON对象并实现数据覆盖?
合并两个JSON文件并让新数据覆盖主文件对应内容
需求说明
将新JSON文件中的数据覆盖主JSON文件的对应内容,主文件中未被新数据修改的字段需保留,匹配依据为对象中的name字段。
主JSON文件内容
{ "data": [ { "name": "name1", "gender": "male", "age": "20", "subject": "Python", "pass": "No" } ] }
新JSON文件(new data.json)内容
{ "data": [ { "name": "name1", "subject": "Python", "pass": "Yes" } ] }
期望结果
{ "data": [ { "name": "name1", "gender": "male", "age": "20", "subject": "Python", "pass": "Yes" // updated } ] }
实现方案(Python)
以下代码可实现按name匹配并更新字段,保留主文件原有未修改内容:
import json # 读取主JSON文件 with open('main.json', 'r', encoding='utf-8') as f: main_data = json.load(f) # 读取新JSON文件 with open('new data.json', 'r', encoding='utf-8') as f: new_data = json.load(f) # 建立新数据的name到对象的映射,快速查找匹配项 new_items_map = {item['name']: item for item in new_data['data']} # 遍历主数据,匹配更新对应字段 for main_item in main_data['data']: name = main_item['name'] if name in new_items_map: # 用新数据覆盖字段,保留主数据原有未修改内容 main_item.update(new_items_map[name]) # 写入合并后的结果文件 with open('merged_result.json', 'w', encoding='utf-8') as f: json.dump(main_data, f, indent=2, ensure_ascii=False)
代码说明
- 读取两个JSON文件并解析为Python字典结构;
- 通过字典映射新数据的
name字段,避免重复遍历查找,提升处理效率; - 遍历主数据对象,若找到同名的新数据项,用
update方法覆盖对应字段; - 将合并结果写入新文件,
indent=2保证格式可读性,ensure_ascii=False支持非ASCII字符。
内容的提问来源于stack exchange,提问作者MAYANK SINGH
相关产品推荐
相关产品推荐

