You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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)

代码说明

  1. 读取两个JSON文件并解析为Python字典结构;
  2. 通过字典映射新数据的name字段,避免重复遍历查找,提升处理效率;
  3. 遍历主数据对象,若找到同名的新数据项,用update方法覆盖对应字段;
  4. 将合并结果写入新文件,indent=2保证格式可读性,ensure_ascii=False支持非ASCII字符。

内容的提问来源于stack exchange,提问作者MAYANK SINGH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:10:47