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

如何在Python中对比JSON文件并向其中追加内容

合并JSON文件:将file2中file1没有的对象追加到file1

现有JSON文件

file1.json

[
  {
    "name": "john",
    "version": "0.0"
  },
  {
    "name": "peter",
    "version": "1.0"
  },
  {
    "name": "bob",
    "version": "2.0",
    "single": "true"
  }
]

file2.json

[
  {
    "name": "jane",
    "version": "0.0"
  },
  {
    "name": "peter",
    "version": "1.0"
  },
  {
    "name": "bob",
    "version": "2.0",
    "single": "true"
  }
]

需求说明

对比两个文件中的name字段,把file2里存在但file1里没有的name对应的JSON对象,追加到file1.json中。比如上面的例子里,jane不在file1里,所以要把对应的对象加进去,最终file1应该是:

[
  {
    "name": "john",
    "version": "0.0"
  },
  {
    "name": "peter",
    "version": "1.0"
  },
  {
    "name": "bob",
    "version": "2.0",
    "single": "true"
  },
  {
    "name": "jane",
    "version": "0.0"
  }
]

你写的代码(存在问题)

import json  # 原代码漏了导入json模块

with open('file1.json', 'r') as file1, open('file2.json', 'r') as file2:
    file1_json = json.load(file1)
    file2_json = json.load(file2)

for object in file2_json:
    if object['name'] not in file1_json.values():
        file1_json.update(object)

with open('file1.json', 'w') as file1:
    json.dump(file1_json, file1, indent=4)

代码问题点

  1. file1_json是列表类型,不是字典,所以没有values()和update()方法,运行会直接报错
  2. 就算要检查name是否存在,也不能直接用file1_json.values(),得先提取所有file1里的name值

修正后的代码

import json

with open('file1.json', 'r') as file1, open('file2.json', 'r') as file2:
    file1_data = json.load(file1)
    file2_data = json.load(file2)

# 提取file1中所有已存在的name,用集合存,查找效率更高
existing_names = {item['name'] for item in file1_data}

# 遍历file2的每个对象,检查name是否不在file1里
for item in file2_data:
    if item['name'] not in existing_names:
        file1_data.append(item)
        existing_names.add(item['name'])  # 避免重复添加(如果file2里有重复name的话)

# 写入更新后的内容到file1.json
with open('file1.json', 'w') as file1:
    json.dump(file1_data, file1, indent=4)

说明

  • 先把file1里的所有name放到集合existing_names里,集合的成员查询速度比列表快很多,数据量大的时候更明显
  • 遍历file2的每个对象,只要name不在集合里,就追加到file1的列表中,同时把这个name加入集合,防止file2里有重复name的对象被多次添加
  • 最后用json.dump写入时指定indent=4,保证输出的JSON格式和原来一致,可读性好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:50:28