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

如何用Python从数千条此类记录中提取食物名称及营养成分名称和数值?

如何用Python从批量JSON记录中提取食物名称、营养成分及对应数值

针对你手头数千条示例格式的JSON记录,以下是直接可复用的提取方案:

1. 先确保JSON格式合法

示例中的原始JSON存在格式缺失(最后一个dishes项未闭合),处理前要修复这类语法问题,否则解析会失败。

2. 基础提取代码

用Python内置的json模块解析数据,然后嵌套遍历提取目标字段:

import json

# 示例修复后的JSON字符串
raw_json = '[{"meal": "MY food", "dishes": [{"nutritions": [{"name": "Calories", "value": "412"}, {"name": "Carbs", "value": "29"}, {"name": "Fat", "value": "24"}, {"name": "Protein", "value": "21"}, {"name": "Sodium", "value": "258"}, {"name": "Sugar", "value": "29"}], "name": "my - McDonalds Espresso Pronto® Flat White, 2 TALL"}, {"nutritions": [{"name": "Calories", "value": "170"}, {"name": "Carbs", "value": "25"}, {"name": "Fat", "value": "5"}, {"name": "Protein", "value": "20"}, {"name": "Sodium", "value": "260"}, {"name": "Sugar", "value": "2"}], "name": "Quest Bar - Banana Nut Muffin Natural Protein Bar, 60 g"}, {"nutritions": [{"name": "Calories", "value": "176"}, {"name": "Carbs", "value": "33"}, {"name": "Fat", "value": "1"}, {"name": "Protein", "value": "5"}, {"name": "Sodium", "value": "195"}, {"name": "Sugar", "value": "0"}]}]}]'

# 解析JSON
data = json.loads(raw_json)

# 提取核心数据
extracted = []
for meal in data:
    for dish in meal["dishes"]:
        food_name = dish["name"]
        for nutrient in dish["nutritions"]:
            extracted.append({
                "食物名称": food_name,
                "营养成分": nutrient["name"],
                "数值": nutrient["value"]
            })

# 验证结果
for item in extracted[:3]:
    print(item)

3. 批量处理文件中的数千条记录

如果数据存储在JSON文件中(比如一个大数组或每行一条JSON),可以直接读取文件处理,还能把结果导出为CSV方便后续分析:

import json
import csv

# 读取批量JSON文件
with open("food_records.json", "r", encoding="utf-8") as f:
    data = json.load(f)

# 提取逻辑同上
extracted = []
for meal in data:
    for dish in meal["dishes"]:
        food_name = dish["name"]
        for nutrient in dish["nutritions"]:
            # 可选:将数值转为数字类型(处理非数值时加try-except)
            try:
                value = float(nutrient["value"])
            except ValueError:
                value = nutrient["value"]
            extracted.append({
                "食物名称": food_name,
                "营养成分": nutrient["name"],
                "数值": value
            })

# 导出为CSV
with open("nutrition_data.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.DictWriter(f, fieldnames=["食物名称", "营养成分", "数值"])
    writer.writeheader()
    writer.writerows(extracted)

注意事项

  • 若原始JSON存在格式错误,可先用在线JSON校验工具排查,或在代码中加入try-except捕获异常并记录问题数据
  • 针对超大规模数据,改用生成器(yield)逐步处理,避免内存溢出
  • 数值转换时要考虑异常情况(比如非数字字符串),避免程序崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:54:55