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

使用Python Pandas校验两个JSON匹配性并排查差异

Python Pandas实现JSON内容校验(基于基准JSON)

核心逻辑实现

以下代码将两个JSON转为DataFrame后,以第二个JSON(基准)的列子集为基准,逐列校验第一个JSON的字段存在性与值匹配情况:

import pandas as pd
import json

# 示例JSON数据(实际场景可从文件读取,比如pd.read_json("file.json"))
# 待校验JSON
json_source = '{"name": "Alice", "age": 30, "city": "New York"}'
# 基准JSON
json_base = '{"name": "Alice", "age": 31, "email": "alice@example.com"}'

# 转为单条记录的DataFrame
df_source = pd.DataFrame([json.loads(json_source)])
df_base = pd.DataFrame([json.loads(json_base)])

# 生成校验报告
check_report = []
for field in df_base.columns:
    # 检查字段是否存在于待校验DataFrame
    if field not in df_source.columns:
        check_report.append(f"字段 *{field}*: 不存在于待校验JSON")
        continue
    
    # 提取对应值(单条记录取第0行)
    val_source = df_source[field].iloc[0]
    val_base = df_base[field].iloc[0]
    
    # 值匹配判断
    if val_source == val_base:
        check_report.append(f"字段 *{field}*: 值匹配({val_source})")
    else:
        check_report.append(f"字段 *{field}*: 值不匹配 - 待校验值: {val_source}, 基准值: {val_base}")

# 输出校验结果
print("=== 校验报告 ===")
for line in check_report:
    print("-", line)

示例输出

=== 校验报告 ===
- 字段 *name*: 值匹配(Alice)
- 字段 *age*: 值不匹配 - 待校验值: 30, 基准值: 31
- 字段 *email*: 不存在于待校验JSON

扩展:多条记录的JSON数组校验

如果你的JSON是包含多条记录的数组形式,可调整代码按行对应校验:

# 示例JSON数组
json_source_arr = '[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]'
json_base_arr = '[{"name": "Alice", "age": 31}, {"name": "Bob", "email": "bob@example.com"}]'

# 直接读取JSON数组为DataFrame
df_source = pd.read_json(json_source_arr)
df_base = pd.read_json(json_base_arr)

# 逐行校验
for row_idx in df_base.index:
    print(f"\n=== 第{row_idx+1}条记录校验 ===")
    for field in df_base.columns:
        if field not in df_source.columns:
            print(f"- 字段 *{field}*: 待校验JSON无此字段")
            continue
        
        # 处理待校验JSON记录数不足的情况
        if row_idx >= len(df_source):
            print(f"- 字段 *{field}*: 待校验JSON无对应记录,基准值: {df_base.at[row_idx, field]}")
            continue
        
        val_source = df_source.at[row_idx, field]
        val_base = df_base.at[row_idx, field]
        
        # 处理空值场景
        if pd.isna(val_source) and pd.isna(val_base):
            print(f"- 字段 *{field}*: 双方值均为空,匹配")
        elif val_source == val_base:
            print(f"- 字段 *{field}*: 值匹配({val_source})")
        else:
            print(f"- 字段 *{field}*: 值不匹配 - 待校验值: {val_source}, 基准值: {val_base}")

关键说明

  1. 以基准JSON的列作为校验范围,确保只校验需要的字段
  2. 校验过程中遇到不存在的字段会记录并继续后续校验,不会中断
  3. 支持单条记录和多条记录的JSON格式,可根据实际场景调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:15:27