You need to enable JavaScript to run this app. 500MB JSON含未转义双引号导致pandas read_json报错如何修复
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 11:06:01