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

如何使用json_normalize提取嵌套JSON数据?

如何使用json_normalize提取嵌套JSON数据?

我看你这是用pd.json_normalize处理嵌套JSON时踩了两个小坑,导致出现数据重复的问题,调整一下细节就能得到你想要的结果啦!

先看你的原始嵌套JSON结构:

{
    "return": {
        "status_processing": "3",
        "status": "OK",
        "order": {
            "id": "872102042",
            "number": "123831",
            "date_order": "dd/mm/yyyy",
            "items": [
                {
                    "item": {
                        "id_product": "684451795",
                        "code": "VPOR",
                        "description": "Product 1",
                        "unit": "Un",
                        "quantity": "1.00",
                        "value": "31.76"
                    }
                },
                {
                    "item": {
                        "id_product": "684451091",
                        "code": "VSAP",
                        "description": "Product 2",
                        "unit": "Un",
                        "quantity": "1.00",
                        "value": "31.76"
                    }
                }
            ]
        }
    }
}

你之前尝试的代码存在两个问题:

df = pd.json_normalize(
    order_list,
    record_path=["return", "order", "itens"],  # 这里有两个错误:1. itens拼写错误(JSON里是items);2. 路径没到最内层的item对象
    meta=[
        ["return", "order", "id"],
        ["return", "order", "date_order"],
        ["return", "order", "number"],
    ],
)

修正后的代码及解释

直接把record_path精准指向最内层的item对象,同时修正拼写问题,就能一步到位得到预期的DataFrame:

import pandas as pd

df = pd.json_normalize(
    order_list,
    record_path=["return", "order", "items", "item"],  # 进到最内层的item节点,直接展开商品数据
    meta=[
        ["return", "order", "id"],
        ["return", "order", "date_order"],
        ["return", "order", "number"],
    ],
)

# 可选:给列重命名,让表头更直观
df.columns = [
    "id_product", "code", "description", "unit", "quantity", "value",
    "order_id", "order_date", "order_number"
]

运行后就能得到你想要的结果:

id_productcodedescriptionunitquantityvalueorder_idorder_dateorder_number
684451795VPORProduct 1Un1.0031.76872102042dd/mm/yyyy123831
684451091VSAPProduct 2Un1.0031.76872102042dd/mm/yyyy123831

关键说明

  • record_path必须精准定位到你要展开的最内层数据节点,这里就是每个items元素里的item对象,避免后续二次展开导致数据重复
  • meta参数用来把订单级别的全局字段(比如订单ID、日期)关联到每一行商品数据上,保证数据的关联性
  • 列重命名是为了去掉嵌套路径前缀,让表头更易读

备注:内容来源于stack exchange,提问作者Cesar Augusto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 20:18:03