500MB JSON含未转义双引号导致pandas read_json报错如何修复
解决方法
以下方案均适配500MB级大文件处理,不会出现内存溢出问题,修复后的文件可直接用pandas加载。
方案1:Python处理(推荐,兼容性最高)
采用逐行流式读取,支持两种处理逻辑可选:
逻辑1:转义name字段的非法未闭合双引号
import re import json # 匹配name字段值中间的未转义双引号 pattern = re.compile(r'"name":"([^"]*)"([^"]*)"') with open('你的输入文件.json', 'r', encoding='utf-8') as f_in, open('修复后文件.json', 'w', encoding='utf-8') as f_out: for line in f_in: # 把中间的双引号替换为转义形式 fixed_line = pattern.sub(r'"name":"\1\\"\2"', line) # 可选校验JSON合法性后再写入 try: json.loads(fixed_line) f_out.write(fixed_line) except json.JSONDecodeError: # 自定义异常行处理逻辑,示例为标记后写入 f_out.write(f"# 未修复异常行:{line}")
逻辑2:直接删除name为Jack的contact条目(符合你接受的处理规则)
import re # 匹配带多余引号的Jack开头的contact元素 pattern = re.compile(r'\{"name":"Jack ".*?"\},?') with open('你的输入文件.json', 'r', encoding='utf-8') as f_in, open('修复后文件.json', 'w', encoding='utf-8') as f_out: for line in f_in: fixed_line = pattern.sub('', line) # 清理删除条目后多余的逗号 fixed_line = fixed_line.replace(',]', ']').replace('[,,', '[').replace(',,', ',') f_out.write(fixed_line)
方案2:sed命令行快速处理(适合JSON Lines格式,执行速度最快)
转义非法双引号:
sed -E 's/"name":"([^"]*)"([^"]*)"/"name":"\1\\\\"\2"/g' 你的输入文件.json > 修复后文件.json
删除目标contact条目:
sed -E 's/\{"name":"Jack ".*?"\},?//g;s/,]/]/g;s/\[,/[/g' 你的输入文件.json > 修复后文件.json
方案3:awk处理
awk '{ gsub(/"name":"([^"]*)"([^"]*)"/, "\"name\":\"\\1\\\\\"\\2\"", $0) print $0 }' 你的输入文件.json > 修复后文件.json
小提示:如果你的JSON是整文件单个大对象而非逐行存储的JSON Lines格式,上述正则方案依然生效,不需要全量加载到内存。
内容的提问来源于stack exchange,提问作者Datadev
相关产品推荐
相关产品推荐

