Python中如何将API返回的嵌套JSON转换为规整的Pandas DataFrame
嵌套JSON转指定字段DataFrame的解决方法
你不需要额外安装第三方模块,使用Python自带的json模块和pandas即可实现需求,核心是先定位到JSON中存储有效数据的嵌套层级,再做字段筛选。
方法1:直接处理API返回的JSON数据(无需先存本地文件)
你调用接口返回的JSON结构中,COOKRCP01节点下的row数组才是存储所有菜谱条目的有效数据层,直接解析该层即可:
import requests import pandas as pd def Bring_API(): url = "api_url/authenticate key/options" response = requests.get(url) data = response.json() # 定位到菜谱数据的列表层 recipe_list = data["COOKRCP01"]["row"] # 只提取需要的指定字段生成DataFrame df = pd.DataFrame(recipe_list, columns=["RCP_PARTS_DTLS", "RCP_NM"]) # 可选:处理原料字段的换行内容,去掉第一行的菜名,只保留配料 df["RCP_PARTS_DTLS"] = df["RCP_PARTS_DTLS"].str.split("\n").str[1] print(df) # 可按需导出为csv、excel等格式 # df.to_csv("recipe.csv", index=False, encoding="utf-8-sig") return df Bring_API()
方法2:处理本地已保存的JSON文件
如果已经把接口返回内容存为本地JSON文件,不要直接用pd.read_json读取,先解析成字典再定位层级:
import json import pandas as pd # 读取本地JSON文件并解析为字典 with open(r'C:\Users\admin\Desktop\1.json', 'r', encoding='utf-8') as f: data = json.load(f) # 定位到菜谱数据列表层 recipe_list = data["COOKRCP01"]["row"] # 提取指定字段生成DataFrame df = pd.DataFrame(recipe_list, columns=["RCP_PARTS_DTLS", "RCP_NM"]) # 可选:处理原料字段的换行内容 df["RCP_PARTS_DTLS"] = df["RCP_PARTS_DTLS"].str.split("\n").str[1] print(df)
核心说明
你之前的代码运行结果不符合预期,是因为直接把整个嵌套JSON传给pd.read_json,pandas会把COOKRCP01下的RESULT、row、total_count这些子节点当成行索引,对应值作为单元格内容,自然会出现结构混乱的情况。
如果需要提取更多字段,直接在pd.DataFrame的columns参数列表中添加对应的JSON键名即可。
内容的提问来源于stack exchange,提问作者JUN
相关产品推荐
相关产品推荐

