You need to enable JavaScript to run this app. Pandas调用json_normalize处理嵌套JSON时三级meta触发KeyError如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Pandas调用json_normalize处理嵌套JSON时三级meta触发KeyError如何解决

问题原因

你写的三级嵌套meta路径格式本身符合json_normalize的要求,报错核心原因是返回的GraphQL数据中,部分条目不存在node -> organization -> company这条完整路径,比如部分node节点没有organization字段、或是organization下没有company字段,json_normalize默认遇到缺失路径就会抛出KeyError。

解决方案

1. 新增errors参数忽略缺失字段

直接在json_normalize参数中添加errors='ignore',缺失的字段会自动填充为NaN,不会中断执行:

nd = pd.json_normalize(
    res,
    record_path=["node", "events", "edges"],
    meta=[
        ["node", "organization", "company"], 
        ["node", "name"], 
        ["node", "ip"], 
        ["node", "id"], 
        ["node", "deviceClass"]
    ],
    errors='ignore'
)

如果执行后company字段全为NaN,建议先检查原始数据的字段名拼写、大小写是否和实际返回一致,确认是否有数据包含该字段。

2. 预处理原始数据补全字段

如果需要确保字段一定存在,可以提前遍历所有原始数据条目,补全缺失的嵌套结构,避免路径不存在:

for item in res:
    node = item.get("node", {})
    # 补全organization结构
    if "organization" not in node or not isinstance(node["organization"], dict):
        node["organization"] = {}
    if "company" not in node["organization"]:
        node["organization"]["company"] = None

预处理完成后再执行原来的json_normalize代码即可。

3. 分步骤解析再关联表

如果嵌套层级复杂,建议分两步解析再关联,逻辑更清晰也更容易排查问题:

# 提取设备基础信息
device_df = pd.json_normalize(res, record_path=["node"])
# 提取事件信息并关联设备id
event_df = pd.json_normalize(
    res,
    record_path=["node", "events", "edges"],
    meta=[["node", "id"]]
)
# 两个表按设备id关联得到最终结果
final_df = event_df.merge(
    device_df[["id", "organization.company", "name", "ip", "deviceClass"]],
    left_on="node.id",
    right_on="id",
    how="left"
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 10:36:03