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

使用json_normalize函数解析含嵌套列表的JSON并生成DataFrame

解析嵌套JSON生成结构化DataFrame(使用json_normalize)

待解析的JSON数据

{
  "Serialnumber": 1,
  "JSON": {
    "body": {
      "ver": "1",
      "dt": 169,
      "od": "OBJECT_ID",
      "bin": "Vbin",
      "myname": "VME",
      "msgss": [
        {
          "code": "TLHGH1",
          "Details": {
            "no": 1,
            "rep": 4
          },
          "pngds": [
            {
              "id": "ID1",
              "mpo": 16,
              "mkg": "up"
            }
          ]
        },
        {
          "code": "TLHGH2",
          "Details": {
            "no": 2,
            "rep": 5
          },
          "pngds": [
            {
              "id": "ID2",
              "mpo": 17,
              "mkg": "down"
            }
          ]
        }
      ]
    }
  }
}

解析步骤与代码

通过pandas的json_normalize函数分层次展开嵌套结构,最终得到扁平化的DataFrame:

import pandas as pd

# 原始JSON数据
data = {
  "Serialnumber": 1,
  "JSON": {
    "body": {
      "ver": "1",
      "dt": 169,
      "od": "OBJECT_ID",
      "bin": "Vbin",
      "myname": "VME",
      "msgss": [
        {
          "code": "TLHGH1",
          "Details": {"no": 1, "rep": 4},
          "pngds": [{"id": "ID1", "mpo": 16, "mkg": "up"}]
        },
        {
          "code": "TLHGH2",
          "Details": {"no": 2, "rep": 5},
          "pngds": [{"id": "ID2", "mpo": 17, "mkg": "down"}]
        }
      ]
    }
  }
}

# 提取核心嵌套节点body
body_data = data['JSON']['body']

# 第一步:展开msgss列表,同时解析Details子对象
df_msg = pd.json_normalize(
    body_data,
    record_path='msgss',
    meta=['ver', 'dt', 'od', 'bin', 'myname'],
    record_prefix='msgss_',
    meta_prefix='body_'
)

# 第二步:展开pngds列表
df_final = pd.json_normalize(
    df_msg.to_dict('records'),
    record_path='msgss_pngds',
    meta=[col for col in df_msg.columns if col != 'msgss_pngds'],
    record_prefix='pngds_'
)

# 补充Serialnumber字段
df_final['Serialnumber'] = data['Serialnumber']

# 调整列顺序(可选)
df_final = df_final[
    ['Serialnumber', 'body_ver', 'body_dt', 'body_od', 'body_bin', 'body_myname',
     'msgss_code', 'msgss_Details.no', 'msgss_Details.rep',
     'pngds_id', 'pngds_mpo', 'pngds_mkg']
]

print(df_final)

最终输出结果

Serialnumber body_ver  body_dt    body_od body_bin body_myname msgss_code  msgss_Details.no  msgss_Details.rep pngds_id  pngds_mpo pngds_mkg
0             1        1      169  OBJECT_ID     Vbin         VME     TLHGH1                 1                  4      ID1         16        up
1             1        1      169  OBJECT_ID     Vbin         VME     TLHGH2                 2                  5      ID2         17      down

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:53:09