将JSON响应转换为pandas DataFrame时出现NotImplementedError的问题排查
问题原因及解决方法
错误根源
触发NotImplementedError的核心原因是给json_normalize传入了原始JSON字符串,而json_normalize要求输入必须是Python字典或列表类型的结构化数据,无法直接处理字符串格式的内容。
修正步骤
- 解析JSON响应为Python对象:
使用response.json()方法直接将API返回的JSON响应解析为Python字典/列表,这比手动调用json.loads(response.text)更简洁且能自动处理响应编码问题。 - 定位需要规范化的嵌套数组:
USDA该API的响应是嵌套结构,实际的出版物数据存放在data字段对应的数组中,直接传入整个响应字典会导致规范化不完整,必须提取这个具体的数组部分。
修正后的完整代码
import requests from pandas import json_normalize url = "https://usda.library.cornell.edu/api/v1/publication/findAll" headers = { 'Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjE0NDc1fQ.YpppSpjBnGfHv8DBEiWCrmv-KgtF3MLzniHF89hW9L8' } # 发送GET请求并解析JSON为Python对象 response = requests.get(url, headers=headers) data = response.json() # 提取嵌套的出版物数组进行规范化处理 df = json_normalize(data['data']) print(df)
额外提示
requests.request("GET")可简化为requests.get(),更符合Python的简洁写法。- 若后续API响应结构调整,可先打印
data查看具体层级,确保提取的是正确的目标数组。
内容的提问来源于stack exchange,提问作者prashanth manohar
相关产品推荐
相关产品推荐

