You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复含错误序列化字段(含数组字段)的大体积JSON文件

1GB错误JSON文件修复方案(Windows 11适用)

方法1:Python脚本处理(灵活可控,优先推荐)

大文件不能直接加载进内存,所以采用逐行读取的方式处理,避免内存溢出。

具体逻辑

针对你的两个问题字段做定向转换:

  • numberfield:将字符串格式的数字转为纯数字类型(自动区分整数/浮点数)
  • arrayfield:处理单引号包裹、内部混有单双引号的字符串数组,转为标准JSON数组

示例代码

import json
import re

def fix_single_line(line):
    try:
        data = json.loads(line)
        # 修复数字字段
        if "numberfield" in data and isinstance(data["numberfield"], str):
            try:
                data["numberfield"] = int(data["numberfield"]) if "." not in data["numberfield"] else float(data["numberfield"])
            except:
                pass  # 非合法数字字段保持原样
        
        # 修复数组字段
        if "arrayfield" in data and isinstance(data["arrayfield"], str):
            raw_arr = data["arrayfield"].strip("'")
            # 先转义内部双引号,再替换单引号为双引号,尝试解析为数组
            fixed_arr_str = raw_arr.replace('"', '\\"').replace("'", '"')
            try:
                data["arrayfield"] = json.loads(f"[{fixed_arr_str}]")
            except:
                # 复杂情况用正则替换未转义的单引号
                fixed_arr_str = re.sub(r"(?<!\\)'", '"', raw_arr)
                try:
                    data["arrayfield"] = json.loads(f"[{fixed_arr_str}]")
                except:
                    pass  # 无法解析的字段保持原样
        
        return json.dumps(data)
    except:
        return line  # 无效JSON行直接保留

# 替换为你的实际文件路径
input_file = "原始JSON文件.json"
output_file = "修复后JSON文件.json"

with open(input_file, "r", encoding="utf-8") as in_f, open(output_file, "w", encoding="utf-8") as out_f:
    for line in in_f:
        fixed_line = fix_single_line(line.strip())
        out_f.write(fixed_line + "\n")

操作步骤

  1. 从微软商店或Python官网安装Windows版Python
  2. 将代码保存为fix_json.py,修改文件路径为你自己的文件路径
  3. 打开命令提示符,运行python fix_json.py即可

方法2:jq命令行工具(轻量高效)

Windows 11可安装jq工具,利用其流式处理能力快速处理大文件,无需编写复杂脚本。

示例命令

# 针对每行一个JSON对象的格式处理
jq '
    # 修复numberfield:字符串转数字
    .numberfield = (if .numberfield | type == "string" then (.numberfield | tonumber? // .numberfield) else .numberfield end) |
    # 修复arrayfield:处理单引号包裹的数组
    .arrayfield = (if .arrayfield | type == "string" then
        (.arrayfield | ltrimstr("'") | rtrimstr("'") | gsub("(?<!\\\\)\'"; "\"") | fromjson? // .arrayfield)
    else .arrayfield end)
' 原始文件.json > 修复后文件.json

操作步骤

  1. 下载jq的Windows版本,解压后将jq.exe放入系统PATH目录(如C:\Windows)
  2. 打开PowerShell,运行上述命令(注意替换字段名和文件路径)

方法3:桌面工具(适合非编程用户)

  • JSONBuddy:支持大文件流式加载,自带字段类型转换功能,可自定义规则处理字符串数组
  • Notepad++ + JSON Tools插件:若文件可拆分处理,用插件的格式化功能配合正则替换,解决引号格式问题

内容的提问来源于stack exchange,提问作者grayfallstown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:53:27