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

Python如何展开无键嵌套JSON数组并生成目标结构Pandas DataFrame

Pandas展开动态键嵌套JSON的实现方法

问题原因

之前的pd.json_normalize调用报错找不到id键,核心问题是数据结构存在动态生成的键:

  • availability是唯一固定的顶层键
  • 其下的日期(如2022-07-15、2022-07-17)是动态键,没有固定字段名,无法直接通过record_path、meta参数指定固定读取路径
  • id和quantity字段实际存储在每个日期键对应的数组元素中,和日期键本身不在同一层级

实现代码

直接遍历动态键拼接记录是最简便、兼容性最好的方案,不需要依赖固定字段名:

import pandas as pd

# 原始JSON数据
raw_data = {'availability': 
   {'2022-07-15': [{'id': '1234', 'quantity': 14}, {'id': '5678', 'quantity': 18}, {'id': '2345', 'quantity': 20}], 
    '2022-07-17': [{'id': '1234', 'quantity': 2}, {'id': '5678', 'quantity': 74}, {'id': '2345', 'quantity': 64}]}
}

record_list = []
# 遍历所有动态日期键,及对应日期下的库存条目
for date, stock_items in raw_data['availability'].items():
    for item in stock_items:
        # 给每条库存条目绑定对应的日期
        item['date'] = date
        record_list.append(item)

# 生成DataFrame并将日期设为索引,和预期结构完全匹配
df = pd.DataFrame(record_list).set_index('date')

运行结果

执行后打印df即可得到目标结构:

id  quantity
date                     
2022-07-15  1234        14
2022-07-15  5678        18
2022-07-15  2345        20
2022-07-17  1234         2
2022-07-17  5678        74
2022-07-17  2345        64

该方案对动态键的适配性很强,后续availability下新增任意日期的库存数据,都不需要修改处理逻辑。如果偏好json_normalize的链式写法,也可以先通过列表推导式把日期字段嵌入每个子项,再调用归一化接口,实现逻辑和遍历方案本质一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:54:17