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

使用Python pandas提取嵌套JSON API数据报错及实现求助

错误原因说明

你之前代码报错的核心问题有两个:

  1. 拿到的API响应是bytes类型,没有解码转成Python字典,直接传入json_normalize无法识别JSON结构
  2. 参数写法不符合规则:['Data']['time', 'high', 'low', 'close']属于非法列表索引写法,相当于给列表传入元组作为索引,直接触发TypeError;['Data'][3]的写法也错误,列表['Data']只有1个元素,不存在索引为3的项。

正确实现代码

import pandas as pd
import json

# 原始API返回的bytes内容
res = b'{"Response":"Success","Message":"","HasWarning":false,"Type":100,"RateLimit":{},"Data":{"Aggregated":false,"TimeFrom":1629936000,"TimeTo":1630800000,"Data":[{"time":1629936000,"high":49358.2,"low":46456.68,"open":48996.44,"volumefrom":34276.36,"volumeto":1618461768.41,"close":46852.22,"conversionType":"direct","conversionSymbol":""},{"time":1630022400,"high":49166.31,"low":46376.81,"open":46852.22,"volumefrom":27872.76,"volumeto":1331637984.84,"close":49088.1,"conversionType":"direct","conversionSymbol":""}]}}'

# 第一步:解码bytes并转换为Python字典
data = json.loads(res.decode("utf-8"))

# 第二步:解析嵌套JSON生成DataFrame
df = pd.json_normalize(
    data,
    record_path=["Data", "Data"]  # 对应嵌套层级中的行情数组
)

# 第三步:筛选目标字段,处理时间格式
df = df[["time", "close", "high", "low"]]
# 把Unix时间戳转为"%Y-%m-%d"格式的日期
df["time"] = pd.to_datetime(df["time"], unit="s").dt.strftime("%Y-%m-%d")
# 将日期设为索引,匹配你需要的输出格式
df = df.set_index("time")

print(df)

输出结果

close     high       low
time
2021-08-26  46852.22  49358.20  46456.68
2021-08-27  49088.10  49166.31  46376.81

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:09:03