如何从含嵌套字典的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
相关产品推荐
相关产品推荐

