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

如何从含嵌套字典的API JSON数据创建pandas DataFrame

实现方法

不需要逐字段硬编码取值,核心思路是把需要提取的营养字段统一存在配置列表里,通过循环自动完成取值,后续调整提取范围只需要修改配置列表即可。

完整实现代码

import requests
import pandas as pd

# 接口请求逻辑
url = "https://api.edamam.com/api/nutrition-data?app_id=aba82731&app_key=793acdcce19384d28aa31dbd04ae2e42&nutrition-type=logging&ingr=grilled%20chicken%20with%20pasta"
response = requests.get(url)
data = response.json()

# --------------------------
# 配置项:需要提取的营养成分键,后续增减字段只改这个列表
# --------------------------
TARGET_NUTRIENTS = ["CA", "CHOLE", "FAT", "FE", "FIBTG", "K", "MG", "NA", "PROCNT", "SUGAR", "VITC"]

# 初始化行数据,先填顶层固定字段
row = {
    "calories": data["calories"],
    "cautions": ",".join(data["cautions"]),  # 多值用逗号拼接,方便导出表格;需要保留列表格式就去掉join
    "diet_labels": ",".join(data["dietLabels"])
}

# 循环自动提取所有目标营养成分的含量值,无需逐字段手写赋值
for nutri_key in TARGET_NUTRIENTS:
    # 容错处理:接口缺字段时自动填充None,避免代码报错
    nutri_detail = data["totalNutrients"].get(nutri_key, {})
    row[f"nutri_{nutri_key}"] = nutri_detail.get("quantity")

# 转为单行DataFrame
result_df = pd.DataFrame([row])

逻辑说明

  • 所有可变的提取规则都放在配置项里,后续如果要新增提取其他营养成分,比如锌(ZN)、维生素B12(VITB12),只需要把对应的键名加到TARGET_NUTRIENTS列表里,不需要修改核心循环逻辑。
  • 对列表类型的标签类字段做了逗号拼接处理,适配csv、excel等导出场景,如果需要保留列表格式做后续分析,直接去掉",".join()即可。
  • 增加了字段缺失容错,不会因为接口返回结构偶发缺失字段导致程序中断。
  • 用提供的样例数据运行后,会得到1行14列的DataFrame,包含卡路里、注意事项、饮食标签,以及11个指定营养成分的含量值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:06:23