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)
代码关键说明:
- JSON解析:用
json.loads()解析字符串格式的JSON,如果你的数据存在文件里,换成json.load(open('your_file.json', 'r', encoding='utf-8'))即可 - 嵌套字段处理:把
nutrition里的子字段提取到主字典中,这样CSV可以直接生成对应的列 - 列表转字符串:把
major_producers的列表用逗号连接成字符串,匹配你期望的输出格式 - CSV写入优化:用
csv.DictWriter可以直接根据字典键和表头匹配写入,避免手动拼接行;newline=''解决Windows系统下CSV出现空行的问题,encoding='utf-8'保证特殊字符正常存储
运行这段代码后,生成的CSV会和你给出的示例样式完全一致。
内容的提问来源于stack exchange,提问作者Ravi Kumar T C
相关产品推荐
相关产品推荐

