如何使用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_product | code | description | unit | quantity | value | order_id | order_date | order_number |
|---|---|---|---|---|---|---|---|---|
| 684451795 | VPOR | Product 1 | Un | 1.00 | 31.76 | 872102042 | dd/mm/yyyy | 123831 |
| 684451091 | VSAP | Product 2 | Un | 1.00 | 31.76 | 872102042 | dd/mm/yyyy | 123831 |
关键说明
record_path必须精准定位到你要展开的最内层数据节点,这里就是每个items元素里的item对象,避免后续二次展开导致数据重复meta参数用来把订单级别的全局字段(比如订单ID、日期)关联到每一行商品数据上,保证数据的关联性- 列重命名是为了去掉嵌套路径前缀,让表头更易读
备注:内容来源于stack exchange,提问作者Cesar Augusto
相关产品推荐
相关产品推荐

