如何使用pandas DataFrame解析含数组的嵌套JSON
解决JSON嵌套结构转pandas DataFrame的规整解析问题
你的JSON数据存在多层嵌套,其中transaction.client是数组结构,直接用json_normalize(response.json())只会把整个transaction作为列,无法展开数组内的明细内容,导致结果不符合预期。
修改后的代码
通过指定json_normalize的record_path参数,明确要展开的嵌套数组路径,工具会自动处理嵌套的对象(比如price):
import requests from pandas import json_normalize response = requests.get(url, headers=headers, data=payload, verify=True) data = response.json() # 指向要展开的嵌套数组路径:transaction下的client数组 df = json_normalize(data, record_path=['transaction', 'client']) # 查看规整后的表格 print(df)
预期输出结果
执行后会得到如下规整的表格结构,嵌套的price对象会自动展开为带前缀的列:
| name | category | quantity | price.amount | price.tax | price.totalAmountTax |
|---|---|---|---|---|---|
| Paul | p | 1 | 150.0 | 0.0 | 150.0 |
扩展:保留外层交易字段
如果transaction层还有其他需要保留的字段(比如交易ID),可以添加meta参数:
假设JSON结构为:
[{"transaction":{"id":"TXN001", "client":[{"name":"Paul","category":"p","quantity":1,"price":{"amount":150.0,"tax":0.0,"totalAmountTax":150.0}}]}}]
修改代码:
df = json_normalize( data, record_path=['transaction', 'client'], meta=[['transaction', 'id']] # 保留交易ID字段 )
此时输出会新增transaction.id列,对应每条记录所属的交易ID。
内容的提问来源于stack exchange,提问作者CED
相关产品推荐
相关产品推荐

