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

Python 3下嵌套JSON转CSV:旧代码失效求修复方案

适配Python 3的JSON转CSV解决方案

没问题!我帮你把那段老的Python 2代码改成Python 3可用的版本,同时完美处理你给出的嵌套JSON结构,生成你想要的CSV格式。

首先,先说说旧代码在Python 3里报错的常见原因:

  • Python 2的print是语句,Python 3里必须写成print()函数
  • 文件打开模式不同:Python 2用wb二进制模式写CSV,Python 3用文本模式w,还要指定newline=''避免多余空行,同时最好显式指定编码(比如utf-8)
  • 字典迭代方法变化:Python 2的iteritems()在Python 3里改成了items()
  • Python 3严格区分字符串(Unicode)和字节,不需要额外的解码操作

下面是针对你的JSON数据编写的Python 3代码,完全符合你的输出需求:

import json
import csv

# 你的JSON数据(如果是从文件读取,可以用json.load(open('data.json', 'r', encoding='utf-8'))替代)
json_content = '''{ "fruit": [ { "name": "Apple", "binomial name": "Malus domestica", "major_producers": [ "China", "United States", "Turkey" ], "nutrition": { "carbohydrates": "13.81g", "fat": "0.17g", "protein": "0.26g" } }, { "name": "Orange", "binomial name": "Citrus x sinensis", "major_producers": [ "Brazil", "United States", "India" ], "nutrition": { "carbohydrates": "11.75g", "fat": "0.12g", "protein": "0.94g" } }, { "name": "Mango", "binomial name": "Mangifera indica", "major_producers": [ "India", "China", "Thailand" ], "nutrition": { "carbohydrates": "15g", "fat": "0.38g", "protein": "0.82g" } } ] }'''

# 解析JSON数据
parsed_data = json.loads(json_content)
fruit_list = parsed_data['fruit']

# 定义CSV表头,包含嵌套的营养成分字段
csv_headers = [
    'name',
    'binomial name',
    'major_producers',
    'carbohydrates',
    'fat',
    'protein'
]

# 写入CSV文件
with open('fruit_nutrition.csv', 'w', newline='', encoding='utf-8') as csv_file:
    # 使用DictWriter简化字典到CSV的转换
    writer = csv.DictWriter(csv_file, fieldnames=csv_headers)
    writer.writeheader()
    
    for fruit in fruit_list:
        # 把嵌套的nutrition字典合并到主字典中
        nutrition_info = fruit.pop('nutrition')
        fruit.update(nutrition_info)
        # 将产地列表转为逗号分隔的字符串
        fruit['major_producers'] = ', '.join(fruit['major_producers'])
        # 写入当前水果的数据行
        writer.writerow(fruit)

代码关键说明:

  1. JSON解析:用json.loads()解析字符串格式的JSON,如果你的数据存在文件里,换成json.load(open('your_file.json', 'r', encoding='utf-8'))即可
  2. 嵌套字段处理:把nutrition里的子字段提取到主字典中,这样CSV可以直接生成对应的列
  3. 列表转字符串:把major_producers的列表用逗号连接成字符串,匹配你期望的输出格式
  4. CSV写入优化:用csv.DictWriter可以直接根据字典键和表头匹配写入,避免手动拼接行;newline=''解决Windows系统下CSV出现空行的问题,encoding='utf-8'保证特殊字符正常存储

运行这段代码后,生成的CSV会和你给出的示例样式完全一致。

内容的提问来源于stack exchange,提问作者Ravi Kumar T C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:21:46