CSV解析问题:含内部逗号字段替换及转JSON报错求助
解决CSV含内部逗号字段的替换与JSON转换问题
你的问题核心是普通解析方式会误把字段内部的逗号当成分隔符,导致结构错乱。下面给两种实用解决方案:
方案一:用Python脚本处理(灵活可控)
Python的csv模块原生支持解析带双引号包裹的字段,不会拆分内部逗号,处理后再转JSON就不会报错。
示例代码
假设你的CSV内容如下(input.csv):
"field1","field2","test0,test4,test5","field4" "val1","val2","test1,test2,test3","val4"
执行以下脚本即可完成替换并转JSON:
import csv import json input_path = "input.csv" output_path = "output.json" # 自定义替换文本,无需手动加双引号,JSON序列化时会自动处理 replace_content = "我的自定义文本" processed_rows = [] with open(input_path, "r", encoding="utf-8") as f: reader = csv.reader(f) # 读取表头(如果没有表头,直接跳过这行,后续直接存列表) headers = next(reader) for row in reader: # 替换第三个字段(索引从0开始,所以是2) # 如果需要精确匹配原内容才替换,加判断:if row[2] == "test0,test4,test5" row[2] = replace_content processed_rows.append(dict(zip(headers, row))) # 写入JSON文件 with open(output_path, "w", encoding="utf-8") as f: json.dump(processed_rows, f, ensure_ascii=False, indent=2)
方案二:用命令行工具快速处理(无需写代码)
1. 先用awk替换目标字段
创建replace.awk脚本:
BEGIN { FPAT = "\"[^\"]*\"|[^,]*" # 正确识别双引号包裹的字段 OFS = "," } { # 精确匹配第三个字段的原内容,替换为带双引号的自定义文本 if ($3 == "\"test0,test4,test5\"") { $3 = "\"我的自定义文本\"" } print $0 }
执行命令生成处理后的CSV:
awk -f replace.awk input.csv > processed.csv
2. 用jq转JSON
执行命令将处理后的CSV转为JSON:
jq -R 'split(",") | map(ltrimstr("\"") | rtrimstr("\""))' processed.csv > output.json
内容的提问来源于stack exchange,提问作者PP07
相关产品推荐
相关产品推荐

