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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:15:17