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
相关产品推荐
相关产品推荐

