嵌套JSON转CSV问题求助:如何仅写入属性值至CSV文件
问题分析
当前生成的CSV把整个字典作为单个单元格输出,原因是调用csv_writer.writerow(data1)时,data1里装的是完整的store字典,writerow会把列表中的每个元素作为CSV的一列,这里字典是单个元素,所以被转成字符串放进一个单元格里。
修复方案
直接提取字典的值列表,按表头顺序传入writerow即可。同时可以优化代码,避免循环外复用同一个字典对象,以及用dict.get()简化缺失键的处理:
import json import csv # 读取JSON数据 with open('test.json') as json_file: data = json.load(json_file) employee_data = data['cn'] header = ['firstName','lastName','jobtitle','company','workPostalCode','workCity','workStreet','mobilePhone','email'] # 写入CSV文件,使用with语句自动关闭文件 with open('data_file.csv', 'w', newline='') as data_file: csv_writer = csv.writer(data_file) csv_writer.writerow(header) for emp in employee_data: attrs = emp.get("_attrs", {}) # 按表头顺序提取对应的值,缺失则用None填充 row = [attrs.get(key, None) for key in header] csv_writer.writerow(row)
改动说明
- 去掉了
store字典和data1列表,直接用列表推导式按表头顺序提取值,避免冗余代码。 - 使用
emp.get("_attrs", {})确保即使某个员工没有_attrs键也不会报错,返回空字典。 - 用
attrs.get(key, None)替代try-except块,更简洁地处理缺失的属性键,自动填充None。 - 使用
with语句管理CSV文件,无需手动调用close(),更安全。 - 新增
newline=''参数,避免Windows系统下CSV出现空行。
内容的提问来源于stack exchange,提问作者Aleksa Markovic
相关产品推荐
相关产品推荐

