
本文介绍如何正确处理每行内容已是合法JSON字符串的CSV文件,避免CSV解析导致的额外引号转义,直接提取原始JSON字符串并保存为独立的.json文件。
本文介绍如何正确处理每行内容已是合法json字符串的csv文件,避免csv解析导致的额外引号转义,直接提取原始json字符串并保存为独立的`.json`文件。
在实际数据处理中,有时会遇到一种特殊格式的CSV文件:它名义上是CSV,但每一行实质上是一个完整的、语法正确的JSON字符串(例如 {"name":"Alice","scores":[95,87]}),而非传统意义上的多列结构化数据。此时若直接按行读取并写入文件(如使用 open().readline()),看似简单,却极易出错——尤其当原始CSV文件为兼容复杂字段(含逗号、双引号等)而采用标准CSV转义规则时,直接读取会导致JSON字符串被包裹在多余引号中,破坏其可解析性。
根本原因在于:你看到的“一行JSON”,在底层CSV文件中可能被写作 "{"key1":"value","key2":true}"(即整个JSON被当作一个带引号的CSV字段)。用纯文本方式读取会保留这些CSV包装符;而正确做法是委托标准CSV解析器(如 csv.reader)自动解包字段,再提取第一个(也是唯一一个)字段的原始内容。
以下是推荐的稳健实现:
从 CSV 数据集生成图数据库加载器和三元组映射。将表格 CSV 数据转换为图数据库可直接使用的节点、边和三元组。
import csv
csv_file = 'path/to/my/file.csv'
with open(csv_file, mode='r', newline='', encoding='utf-8') as infile:
reader = csv.reader(infile)
for i, row in enumerate(reader):
if not row: # 跳过空行
continue
json_content = row[0].strip() # 获取首字段,并去除首尾空白(含换行符)
with open(f"row_{i}.json", "w", encoding='utf-8') as outfile:
outfile.write(json_content + "\n") # 末尾添加换行符,提升可读性✅ 关键要点说明:
- 必须使用
csv.reader而非直接for line in file—— 它能自动识别并剥离CSV规范所需的外层引号与转义; -
row[0]是核心:因每行仅含一个JSON字段,故取列表首元素; - 显式指定
encoding='utf-8'和newline=''可避免跨平台换行符与编码问题; -
strip()消除原始行末可能残留的\r\n或空格,防止JSON语法错误; - 手动追加
\n使生成的JSON文件符合Unix风格且更易人工查看。
⚠️ 注意事项:
- 若CSV文件含BOM头(如UTF-8 with BOM),建议用
open(..., encoding='utf-8-sig')自动跳过; - 若某行解析后
row为空列表(如纯空行或全空白行),需主动跳过,避免IndexError; - 该方案不校验JSON合法性。如需确保每行确实是有效JSON,可在写入前添加
json.loads(row[0])进行验证(捕获json.JSONDecodeError并报错); - 文件命名
row_#.json中的索引i从0开始;若需从1开始,可改用enumerate(reader, start=1)。
此方法无需回溯源头修改数据,也不依赖二次读取与字符串替换,简洁、高效且完全遵循CSV规范,是处理此类“伪CSV真JSON”场景的标准实践。

















