如何将非标准JSON响应字符串转为JSON对象数组并保存为CSV?
解决响应字符串转JSON数组并写入CSV的问题
问题分析
你的代码存在两个核心问题:
- 错误嵌套使用
json.dumps()和json.loads(),这会把原字符串转义后再解析,最终得到的还是原字符串,完全没完成JSON解析工作。 - 响应里的
"null"是字符串值,而非JSON标准的null类型,若需要将其转为JSON的null,得先做字符串替换处理。
解决方案
步骤1:正确解析响应为JSON数组
根据需求选择两种处理方式:
import json response_object = """[{ "a" : "1", "b" : "2", "c" : "null" }, { "d" : "3", "e" : "4", "f" : "null" }] """ # 方案1:直接解析,保留"null"作为字符串值 json_array = json.loads(response_object) # 输出:[{'a': '1', 'b': '2', 'c': 'null'}, {'d': '3', 'e': '4', 'f': 'null'}] # 方案2:把"null"字符串转为JSON标准的null(即Python的None) processed_response = response_object.replace('"null"', 'null') json_array = json.loads(processed_response) # 输出:[{'a': '1', 'b': '2', 'c': None}, {'d': '3', 'e': '4', 'f': None}]
步骤2:将JSON数组写入CSV
提取所有对象的键作为表头,再按顺序写入每行数据:
import csv # 基于已解析的json_array操作 # 收集所有唯一键作为CSV表头 all_keys = set() for item in json_array: all_keys.update(item.keys()) headers = list(all_keys) # 写入CSV文件 with open('output.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(headers) for item in json_array: # 按表头顺序填充值,不存在的键填空字符串 row = [item.get(key, '') for key in headers] writer.writerow(row)
补充说明
原响应字符串本身是有效的JSON格式,无需修改结构,直接调用json.loads()就能解析为数组。如果后续遇到其他非标准JSON问题(比如单引号、未转义的特殊字符),可先做对应字符串替换再解析。
内容的提问来源于stack exchange,提问作者Rifat
相关产品推荐
相关产品推荐

