Nested JSON Normalize using Pandas, KeyError: "Try running with errors='ignore' as key 'company' is not always present"

Nested JSON Normalize using Pandas, KeyError: "Try running with errors='ignore' as key 'company' is not always present"

我正在尝试规范化从 GraphQL API 获取的 JSON 并使用 json_normalize 将其转换为数据帧 JSON

        [{
          "node": {
            "organization": {
              "company": "System"
            },
            "id": "15",
            "ip": "10.6.11.110",
            "name": "devce_name",
            "deviceClass": {
              "logicalName": "class OEM",
              "class": "class",
              "description": "OEM",
              "deviceCategory": {
                "name": "Unknown"
              }
            },
            "asset": {
              "location": "",
              "make": "make"
            },
            "events": {
              "edges": [
                {
                  "node": {
                    "message": "Device message",
                    "severity": "3
                  }
                },
                {
                  "node": {
                    "message": "message",
                    "severity": "2",
                  }
                }
              ]
            }
          }
        },
        ...
     ]

这是 json_normalize 使用 pandas 我正在尝试

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

如果 meta inside size 为 2 则没有错误,

例如:- meta= [["节点", "组织"], ["节点", "名称"], ["节点", "ip"], ["节点" , "id"], ["node", "deviceClass"]]

但是当我在列表中尝试超过 2 个时,我得到以下错误。

例如:meta=[[“节点”、“组织”、“公司”]、[“节点”、“名称”]、[“节点”、“id”]、[ “节点”,“设备类”]]

** 键错误:'company' 上述异常是以下异常的直接原因: .... KeyError:“尝试 运行 errors='ignore' 因为键 'company' 并不总是存在”**

如何在 meta 中添加 3 个以上的字段?

谢谢

几天前我遇到了同样的问题,你可以试试这样的不同方法

nd1 = pd.json_normalize(js, record_path=["node", "events","edges"], /
                         meta = [["node", "id"]])

nd2 = pd.merge(nd1, pd.json_normalize(js), on='node.id',how='left')