如何将嵌套JSON响应按指定列导出保存为CSV文件
实现方法
直接用Python标准库就能完成转换,不需要安装第三方依赖,核心处理逻辑:
- 遍历JSON顶级键,每个键就是
CVE列的编号值 - 取键对应对象里的
risk_meter_score字段作为RISKMETERScore列值 - 嵌套的
risk_meter_score_history数组可以序列化为JSON字符串存入RiskMeterHistory列,内置csv模块会自动处理引号、逗号的转义,不会出现列错位问题
完整代码
import csv import json # 替换为你实际请求得到的JSON响应数据 resp_data = { "CVE-2022-22721": { "id": 9864403, "risk_meter_score": 33, "risk_meter_score_history": [ {"changed_at": "2022-03-15T04:05:32.000Z", "from": 25, "to": 34}, {"changed_at": "2022-03-19T05:15:12.000Z", "from": 34, "to": 30}, {"changed_at": "2022-06-29T04:34:45.000Z", "from": 30, "to": 33} ] } } # 写入CSV文件 with open("cve_risk_export.csv", "w", newline="", encoding="utf-8") as csvfile: writer = csv.DictWriter(csvfile, fieldnames=["CVE", "RISKMETERScore", "RiskMeterHistory"]) writer.writeheader() for cve_id, cve_detail in resp_data.items(): writer.writerow({ "CVE": cve_id, "RISKMETERScore": cve_detail["risk_meter_score"], "RiskMeterHistory": json.dumps(cve_detail["risk_meter_score_history"], ensure_ascii=False) })
格式调整说明
如果不需要存JSON格式的历史记录,想要更高可读性,可以自定义历史字段的拼接规则,比如把每条变更转成日期: 原值→新值的格式,用分号分隔,替换代码中RiskMeterHistory对应的赋值逻辑即可:
# 自定义可读格式的历史记录 history_str = "; ".join([ f"{record['changed_at'][:10]}: {record['from']}→{record['to']}" for record in cve_detail["risk_meter_score_history"] ])
替换后导出的CSV中,RiskMeterHistory列内容为:2022-03-15: 25→34; 2022-03-19: 34→30; 2022-06-29: 30→33
导出的CSV默认用UTF-8编码,用Excel打开如果出现乱码,可以把编码改成
utf-8-sig再重新生成。
内容的提问来源于stack exchange,提问作者Rahul Rakshit
相关产品推荐
相关产品推荐

