修复含错误序列化字段(含数组字段)的大体积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")
操作步骤
- 从微软商店或Python官网安装Windows版Python
- 将代码保存为
fix_json.py,修改文件路径为你自己的文件路径 - 打开命令提示符,运行
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
操作步骤
- 下载jq的Windows版本,解压后将
jq.exe放入系统PATH目录(如C:\Windows) - 打开PowerShell,运行上述命令(注意替换字段名和文件路径)
方法3:桌面工具(适合非编程用户)
- JSONBuddy:支持大文件流式加载,自带字段类型转换功能,可自定义规则处理字符串数组
- Notepad++ + JSON Tools插件:若文件可拆分处理,用插件的格式化功能配合正则替换,解决引号格式问题
内容的提问来源于stack exchange,提问作者grayfallstown
相关产品推荐
相关产品推荐

