不使用csv库时,如何将JSON字符串写入CSV避免逗号拆分列
解决方案
要解决JSON字符串在CSV中被逗号拆分列的问题,且不使用csv库、不手动替换逗号,可利用JSON序列化规则配合CSV的语法规范实现:
- CSV规则:包含逗号/双引号的字段需用双引号包裹,字段内的双引号要替换为两个双引号
- 借助
json.dumps的两次序列化+简单转义替换,自动处理所有需要转义的内容
修改后的代码
import json d: dict = {"foo":"bar", "py": "pi"} json_str = json.dumps(d) # 先将JSON字符串转为JSON格式的字符串(自动包裹双引号并转义内部双引号),再适配CSV的转义规则 csv_safe_json = json.dumps(json_str).replace('\\"', '""') with open("file_test.csv", mode='w') as f: f.write('col_a,col_b\n') # 拼接为col_a填值、col_b为空的CSV行 f.write(f"{csv_safe_json},\n")
最终CSV输出
col_a,col_b "{""foo"": ""bar"", ""py"": ""pi""}",
说明
- 第一次
json.dumps(d):将字典转为标准JSON字符串 - 第二次
json.dumps(json_str):把JSON字符串序列化为带双引号包裹、内部双引号转义的格式(如"{\\"foo\\": \\"bar\\"}") .replace('\\"', '""'):将JSON的转义双引号替换为CSV要求的双引号转义格式,确保字段内的双引号不会破坏CSV结构- 最终拼接的行保证
col_a是完整的JSON字段,col_b为空,完全符合需求
内容的提问来源于stack exchange,提问作者Coldchain9
相关产品推荐
相关产品推荐

