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

pd.json_normalize规范化API返回JSON报错解决方法

错误原因

抛出NotImplementedError是两个写法问题导致的:

  • 传入了错误的输入类型:requests.Response.json()已经将接口返回的JSON解析为Python原生字典,额外调用json.dumps()会把字典重新序列化为字符串,而pd.json_normalize()仅支持接收解析完成的字典、列表类结构化对象,不支持字符串输入。
  • 未指定嵌套记录的展开路径:该JSON顶层分为两部分,header是单组全局元数据对象,entity是存储车辆位置记录的数组。不传入record_path参数时,函数无法定位需要展开为多行数据的目标数组,无法完成转换逻辑。
正确实现代码

不需要做序列化/反序列化的多余操作,直接使用接口返回的解析后字典,通过参数指定展开路径和需要附加的元数据即可:

import pandas as pd
import requests

# 拉取并解析接口数据
resp = requests.get('https://app.mecatran.com/utw/ws/gtfsfeed/vehicles/valleymetro?apiKey=4f22263f69671d7f49726c3011333e527368211f&asJson=true')
raw_data = resp.json()

# 结构化规范化
df = pd.json_normalize(
    data=raw_data,
    record_path="entity",  # 指定要展开为行记录的数组路径
    meta=[  # 指定需要附加到每一行的全局元数据路径
        ["header", "gtfsRealtimeVersion"],
        ["header", "incrementality"],
        ["header", "timestamp"]
    ],
    sep="_"  # 嵌套字段的列名分隔符,默认即为下划线
)
补充说明
  • 上述代码会自动将entity下所有层级的嵌套字段(如vehicle.trip.tripId、vehicle.position.latitude)打平为独立列,同时每一行都会携带顶层header中的全局元数据字段,无需手动拆分合并。

如果不需要保留全局元数据,直接传入raw_data["entity"]调用pd.json_normalize()即可,这就是你之前测试可正常运行的写法,逻辑与上述实现一致,仅省略了附加元数据的步骤。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:57:21