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

Python遍历JSON数组及对比两组JSON数组新增项的技术咨询

解答你的Python JSON数组处理问题

嘿,我来帮你搞定这两个JSON数组的问题,顺便解决你提到的“难以访问数组”的困扰~

1. 如何在Python中遍历JSON数组进行比较?

首先,得把JSON文件转换成Python能直接操作的数据结构——用标准库的json模块就够了。JSON数组会被转成Python的列表,JSON对象会变成字典,这样就能像操作普通列表/字典一样遍历啦。

先看个实际例子,假设你的两个JSON文件内容是这样的:

文件1 (file1.json):

[
  {"id": 1, "product": "牛奶"},
  {"id": 2, "product": "面包"}
]

文件2 (file2.json):

[
  {"id": 1, "product": "牛奶"},
  {"id": 3, "product": "鸡蛋"}
]

第一步,加载JSON文件到Python列表:

import json

# 加载文件1的数组
with open("file1.json", "r", encoding="utf-8") as f:
    arr_from_file1 = json.load(f)  # 这就是Python列表,对应JSON数组

# 加载文件2的数组
with open("file2.json", "r", encoding="utf-8") as f:
    arr_from_file2 = json.load(f)

接下来遍历比较就很简单了,比如逐个检查文件1的元素是否在文件2中存在:

# 遍历文件1的每个元素,和文件2比较
for item in arr_from_file1:
    if item in arr_from_file2:
        print(f"✅ 元素 {item} 在两个文件中都存在")
    else:
        print(f"❌ 元素 {item} 只在文件1里有")

如果你的数组元素是简单类型(比如字符串、数字),遍历比较逻辑是一样的,直接操作就行。

2. 找出文件2相较于文件1的新增数组项

要找新增项,核心是先标记文件1里已有的元素,再从文件2里筛选出不在标记里的元素,分两种情况处理:

情况A:数组项是带唯一标识的对象(比如带id字段)

这种情况用唯一标识(比如id)判断效率最高,直接比较字典的话字段多了会很慢:

# 先把文件1里所有项的id存到集合里(集合查找速度远快于列表)
existing_ids = {item["id"] for item in arr_from_file1}

# 遍历文件2,筛选出id不在existing_ids里的项
new_items = [item for item in arr_from_file2 if item["id"] not in existing_ids]

# 输出结果
print("📄 文件2相较于文件1的新增项为:")
for item in new_items:
    print(item)

运行后就会输出文件2里的{"id": 3, "product": "鸡蛋"}。

情况B:数组项是简单类型(如字符串、数字)

这种情况直接用集合的差集就能搞定:

# 把列表转成集合
set1 = set(arr_from_file1)
set2 = set(arr_from_file2)

# 集合差集就是新增的元素
new_items = list(set2 - set1)
print("新增项:", new_items)

关于“难以访问数组”的小提示

如果你加载JSON后发现没法像列表一样遍历,大概率是因为JSON的根节点不是数组,而是一个对象(比如{"list": [...], "info": "xxx"})。这时候你需要先取出对应的键才能拿到数组:

# 假设JSON根是对象,数组存在"list"键下
data = json.load(f)
arr = data["list"]  # 这样就拿到数组了!

可以先打印type(data)看看是<class 'list'>还是<class 'dict'>,如果是字典,找对应键取数组就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:06:40