如何在Python3中解析指定JSON数据并导出为CSV文件
解决方案:Python3解析JSON并导出指定字段为CSV
第一步:确保正确读取JSON数据
如果标准json模块无法读取你的JSON,大概率是JSON格式包含非标准语法(比如末尾逗号、单引号、注释),可以用json5库兼容解析:
- 先安装依赖:
pip install json5 - 读取示例:
import json5 with open("your_data.json", "r", encoding="utf-8") as f: data = json5.load(f)
如果是标准JSON格式,直接用内置json模块即可:
import json with open("your_data.json", "r", encoding="utf-8") as f: data = json.load(f)
第二步:提取目标字段
根据JSON的实际结构,分两种常见场景处理:
场景1:JSON是包含多个对象的列表
如果数据结构类似[{"this line": "xxx", "Value": "yyy", "Description": "zzz"}, ...],直接遍历提取:
target_key = "this line" results = [] for item in data: # 确保三个字段都存在,避免KeyError if all(k in item for k in [target_key, "Value", "Description"]): line_content = item[target_key] value = item["Value"] desc = item["Description"] results.append([line_content, value, desc])
场景2:JSON是多层嵌套结构
如果目标键藏在深层嵌套里,用递归函数遍历查找:
target_key = "this line" results = [] def find_fields(obj): if isinstance(obj, dict): # 检查当前字典是否包含三个目标字段 if target_key in obj and "Value" in obj and "Description" in obj: results.append([obj[target_key], obj["Value"], obj["Description"]]) # 递归遍历子节点 for v in obj.values(): find_fields(v) elif isinstance(obj, list): for item in obj: find_fields(item) # 执行递归查找 find_fields(data)
第三步:导出为指定格式的CSV
用csv模块处理分号分隔的CSV,避免手动拼接出现转义错误:
import csv with open("output.csv", "w", encoding="utf-8", newline="") as f: writer = csv.writer(f, delimiter=";") # 可选:写入表头 writer.writerow([target_key, "Value", "Description"]) # 写入数据行 writer.writerows(results)
不需要表头的话,直接跳过writer.writerow这行即可。
常见问题排查
- 若提取不到数据,先打印
data的结构,确认目标字段的层级和拼写(JSON键区分大小写) - 若出现
KeyError,说明部分对象缺少字段,可添加异常处理跳过无效项:
for item in data: try: line_content = item[target_key] value = item["Value"] desc = item["Description"] results.append([line_content, value, desc]) except KeyError: # 跳过缺失字段的对象,或记录日志 continue
内容的提问来源于stack exchange,提问作者Hans Pettersson
相关产品推荐
相关产品推荐

