Python实现JSON转CSV:如何筛选指定字段?
从POST响应JSON导出指定字段到CSV的解决方法
问题说明
通过requests发送POST请求获取JSON响应后,需要提取响应中data -> results数组里的ID、cve、cvss、scoreVersion字段,导出为结构规整的CSV文件。但之前的代码将整个对象塞进单个单元格,无法得到预期的列拆分效果。
错误代码回顾
之前尝试的代码:
response = requests.post(url, headers=headers, json=data, verify=False) text_data = response.text json_dict = json.loads(text_data) df = pd.DataFrame.from_dict(json_dict['data']) df.to_csv("output.csv")
问题出在pd.DataFrame.from_dict(json_dict['data']):json_dict['data']是包含results键的字典,pandas会将每个键作为单独列,results列下的每个元素都是完整的对象,导致所有字段被挤在一个单元格里。
正确实现代码
import requests import pandas as pd # 发送POST请求,关闭证书验证(根据实际情况调整verify参数) response = requests.post(url, headers=headers, json=data, verify=False) # 直接解析JSON响应,无需手动调用json.loads json_response = response.json() # 定位到需要的结构化数据:data下的results数组 target_data = json_response['data']['results'] # 创建DataFrame,指定需要保留的字段及顺序 df = pd.DataFrame(target_data, columns=['ID', 'cve', 'cvss', 'scoreVersion']) # 导出CSV,设置index=False避免生成多余的索引列 df.to_csv('output.csv', index=False)
关键说明
- 直接解析响应:
requests的response.json()方法可以直接将响应内容解析为Python字典,省去手动处理text和json.loads的步骤。 - 定位正确的数据层级:必须取
json_response['data']['results'],这个数组中的每个元素都是一条完整的数据记录,pandas会自动将对象的键映射为列名。 - 筛选指定字段:通过
columns参数指定需要导出的字段,既能筛选内容,也能保证列的顺序符合需求。 - 去除索引列:导出CSV时设置
index=False,避免生成默认的索引列,完全匹配预期的CSV格式。
内容的提问来源于stack exchange,提问作者Dasun
相关产品推荐
相关产品推荐

