Python对比两个JSON文件数据差异时遇格式与代码执行问题求助
解决方案
1. 修复非标准JSON文件的读取问题
你的JSON文件不符合标准有两个核心问题:
- 开头带有多余的
data1=/data2=变量定义前缀 - 多个顶级数组直接拼接(
[]连写),而JSON规范仅允许单个顶级值
需要先预处理文件内容,再进行解析:
import json def load_non_standard_json(file_path): with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 移除开头的变量定义前缀(如data1=) content = content.lstrip().split('=', 1)[-1].lstrip() # 将并列的][替换为],[,再在外层套[],转为合法JSON数组 # 例:["a",1]["b",2] → [["a",1],["b",2]] content = '[' + content.replace('][', '],[') + ']' # 解析为Python列表 return json.loads(content)
2. 实现列表差集对比
由于通话记录可能存在重复,先将列表2的元素转成集合(自动去重),再遍历列表1筛选目标元素:
# 读取两个文件的解析后数据 list1 = load_non_standard_json("lis1.json") list2 = load_non_standard_json("list2.json") # 将列表2的元素转为元组(列表不可哈希,无法存入集合)并去重 set2 = set(tuple(item) for item in list2) # 筛选列表1中存在、但列表2中不存在的元素,保留原嵌套格式 result = [item for item in list1 if tuple(item) not in set2] # 输出期望格式 print(f"x = {result}")
3. 测试示例验证
假设lis1.json内容为:
data1= ["Jane Doe", 98132]["John Doe", 12345]
list2.json内容为:
data2= ["Jane Doe", 98132]
运行代码后将输出:
x = [["John Doe", 12345]]
关键说明
- 预处理步骤完全适配你的非标准JSON格式,确保能正确解析为Python列表
- 用元组转集合的方式,解决了列表不可哈希的问题,同时完成通话记录的去重
- 最终结果保留原数据的嵌套列表格式,完全匹配你的输出需求
内容的提问来源于stack exchange,提问作者EJC
相关产品推荐
相关产品推荐

