不使用pandas、csvwriter等工具,手动实现嵌套JSON转CSV的技术求助
问题:原生Python实现嵌套JSON转指定CSV(禁用第三方/内置CSV工具)
输入JSON格式:
[ { "x":"data", "y":"data2", "z": { "abc": [1,2,3,4], "efg": "data3" } }, { "x":"data4", "y":"data5", "n": "data6", "z": { "abc": [1,2,3,4], "efg": "data6" } } ]
需求说明
- 硬编码CSV表头为
x,y,n,abc,efg - 缺失字段直接留空
- 禁止使用
pandas、csv.writer、csv.DictWriter等工具,必须用原生Python实现 - 目标CSV格式示例:
x,y,n,abc,efg data,data2,,[1,2,3,4],data3 data4,data5,data6,[1,2,3,4],data6
现有代码
import json def func(inputFile, outputFile): with open(inputFile, 'r') as file: jsonFile = json.load(file) with open(outputFile, 'w') as csvFile: csvFile.write('x,y,z,abc,efg\n') return csvFile
原生实现方案
直接修改现有代码,通过字段提取、字符串拼接完成转换,关键逻辑如下:
- 修正表头为要求的
x,y,n,abc,efg - 用
dict.get()安全提取字段,避免缺失字段报错 - 处理嵌套的
z字典,逐层提取内部的abc和efg - 将数组格式的
abc转为字符串,保留原格式 - 拼接每行内容并写入文件
完整代码
import json def func(inputFile, outputFile): # 硬编码指定表头 headers = ['x', 'y', 'n', 'abc', 'efg'] with open(inputFile, 'r') as file: json_data = json.load(file) with open(outputFile, 'w') as csvFile: # 写入表头行 csvFile.write(','.join(headers) + '\n') # 遍历每个JSON对象生成CSV行 for item in json_data: # 提取顶层字段,缺失则为空字符串 x_val = item.get('x', '') y_val = item.get('y', '') n_val = item.get('n', '') # 处理嵌套的z字段,不存在则用空字典兜底 z_dict = item.get('z', {}) abc_val = z_dict.get('abc', '') # 将数组转为字符串格式,保持[1,2,3,4]的样式 if isinstance(abc_val, list): abc_val = str(abc_val) efg_val = z_dict.get('efg', '') # 拼接当前行的所有值,空值直接留空 row = [x_val, y_val, n_val, abc_val, efg_val] row_str = ','.join(str(val) if val != '' else '' for val in row) # 写入当前行 csvFile.write(row_str + '\n') # with块结束后文件已关闭,无需返回文件对象 return None
关键细节
- 用
dict.get(key, default)替代直接索引,避免缺失字段抛出KeyError - 嵌套字段
z先判断是否存在,不存在则用空字典,确保后续提取abc/efg不会报错 - 数组类型的
abc直接转字符串,完美匹配需求中的格式 - 所有字段统一转为字符串后再拼接,避免类型错误
内容的提问来源于stack exchange,提问作者Ak2012
相关产品推荐
相关产品推荐

