使用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}")
关键说明
- 以基准JSON的列作为校验范围,确保只校验需要的字段
- 校验过程中遇到不存在的字段会记录并继续后续校验,不会中断
- 支持单条记录和多条记录的JSON格式,可根据实际场景调整
内容的提问来源于stack exchange,提问作者JavaMan
相关产品推荐
相关产品推荐

