JSON 修复

免费在线 JSON 修复工具,自动检测并修复尾逗号、单引号、未加引号键、括号未闭合、注释及 Markdown 包裹等常见语法错误。专为 AI 输出清洗和残缺 JSON 恢复设计,处理全程在浏览器本地完成。

相关推荐

什么是 JSON 修复(JSON Repair)?

JSON 修复(JSON Repair)是把一个因语法错误而无法被严格 JSON 解析器消费的非标准 JSON 文本,自动还原为符合 RFC 8259 标准的合法 JSON 字符串的过程。和「JSON 格式化(Beautify)」不同,JSON 修复处理的不是格式差异,而是结构性错误——尾随逗号、单引号、缺失引号、未闭合括号、Markdown 包裹、注释等都会让 JSON.parse() 直接抛出 SyntaxError,但它们在实际开发中又极为常见。

真实工程里导致 JSON "不标准" 的源头高度集中:① 从 ChatGPT / Claude / Gemini 等大模型复制时,输出常被 Markdown 代码块(```json ... ```)包裹或附带解释性文字;② 从 JavaScript 对象的 console.log() 复制可能带尾随逗号和单引号;③ 配置文件常使用 JSON5 / JSONC 扩展语法(允许注释、未加引号键、多行字符串等);④ 流式响应或日志截取可能让 JSON 在中途断裂、缺少结尾的 `}` 或 `"`。JSON 修复工具扫描输入文本,识别上述典型问题并按"最小侵入"原则还原为标准 JSON,同时尽量保留原始数据语义。

实现层面,JSON 修复通常由两个阶段组成:① 容错解析(tolerant parse)— 用基于状态机的扫描器而不是正则匹配来逐步处理字符流,能区分"字符串内"和"字符串外"的语法字符;② 规范化输出(canonical output)— 用 `JSON.parse` + `JSON.stringify` 重新生成,确保输出对任何下游严格解析器都 100% 合法。GeekFormat 的 JSON 修复工具在浏览器本地完成整个修复流程,原始内容不会发送到任何服务器,适合处理含敏感信息的 API 响应、内部配置文件、AI 模型输出。

适用场景

  • AI/大模型输出清洗:把 ChatGPT/Claude 返回的带 Markdown 包裹、解释性文字和尾逗号的 JSON 一键转为标准 JSON。
  • 接口调试与排错:API 响应因网关或网络问题被截断时,快速补全括号与字符串,定位原始数据结构。
  • 从 JavaScript 复制的对象字面量:单引号、尾随逗号、未加引号键名一站式修正。
  • 配置文件清洗:JSON5/JSONC 中的注释剥离后得到标准 JSON,便于统一接入下游服务。
  • 日志与剪贴板数据修复:含注释、特殊空白或被截断的 JSON 片段快速标准化。
  • 数据迁移与脚本预处理:在数据迁移链路中加入修复步骤,避免少量非法 JSON 阻断整批 ETL。
  • 前端联调清洗接口响应:去掉后端偶发的尾逗号或 JS 注释残留后,再做格式化或键名排序。
  • JSON-LD 结构化数据准备:把 ChatGPT 输出的 Schema.org JSON 剥离 markdown 包裹后注入页面 head。
  • 老旧系统配置文件抢救:把上古系统中复制出来的含注释、单引号的 JSON 配置文件一键转为标准 JSON。
  • VS Code 剪贴板中的 JSON 块还原:从 VS Code 复制代码片段时漏掉了引号或括号时用本工具快速补全。
  • MongoDB 导出数据清洗:Bson/Json 导出后含二进制字符或 BOM 头时,剥离后注入数据仓库做下游分析。
  • 爬虫抓取 JSON 规范化:抓取的 JSON 含 HTML 实体或转义字符时,先修复成标准 JSON 再喂给 JSON Schema 校验。

使用方法

  1. 将报错、带 Markdown 包裹或残缺的 JSON 内容粘贴到左侧输入框,也支持点击「示例」加载一个典型的损坏 JSON 或上传 .json/.txt 文件
  2. 工具会自动检测并修复常见语法问题,右侧输出区显示已格式化的标准 JSON 与每类问题的修复数量
  3. 若仍有红色错误提示,可手工在输入区修改后再触发修复(Mac 按 ⌘+Shift+R 或 Windows 按 Ctrl+Shift+R)
  4. 确认结构无误后,点击「复制」把修复结果放入剪贴板,或点击「下载」保存为 repaired.json 文件继续做格式化、校验等后续处理

功能特点

  • 覆盖 7 类常见语法错误:尾随逗号、单引号、未加引号键、未闭合字符串、注释、缺失括号、Markdown 代码块包裹
  • AI 输出清洗优化:自动剥离 ```json 包裹与代码块外的解释文字,识别 ChatGPT、Claude、Gemini 等大模型典型输出
  • JSON5/JSONC 兼容:对含注释、宽松引号、特殊空白(如不可见 Unicode 字符)的扩展语法同样能解析
  • 残缺 JSON 智能补全:能处理 API 响应被截断、复制内容缺失结尾大括号等情况,自动补全缺失的括号与引号
  • 修复问题可视化:自动统计并展示每类问题被修复的次数,便于审计与人工复核
  • 本地处理保护隐私:解析、修复、格式化全部在浏览器中完成,输入内容不发送到任何服务器
  • 与格式化无缝衔接:修复后的标准 JSON 可一键进入 JSON 格式化、Schema 校验、代码生成等后续流程
  • 可加载文件与示例:支持上传 .json/.txt 文件或点击加载示例,便于快速验证修复效果

代码示例

使用 jsonrepair JavaScript 库进行程序化修复

javascript
// npm install jsonrepair
import { jsonrepair } from 'jsonrepair';

const broken = `{
  name: 'Alice',
  age: 30,
  tags: ['dev', 'writer',], // trailing comma + comment
}`;

try {
  const fixed = jsonrepair(broken);
  const obj = JSON.parse(fixed);
  console.log(obj);
  // => { name: 'Alice', age: 30, tags: ['dev', 'writer'] }
} catch (err) {
  console.error('仍无法修复:', err.message);
}

使用 jsonrepair Python 库进行程序化修复

python
# pip install jsonrepair
from jsonrepair import jsonrepair
import json

broken = '''{
  name: "Alice",
  age: 30,
  tags: ["dev", "writer",], // trailing comma + comment
}'''

fixed = jsonrepair(broken)
obj = json.loads(fixed)
print(obj)
# => {'name': 'Alice', 'age': 30, 'tags': ['dev', 'writer']}

使用 jq + sed 简单修复尾逗号(仅作应急)

bash
# 去除对象/数组末尾的逗号 (应急方案, 不处理注释/单引号)
# 复杂场景请用 jsonrepair 等专门库
sed -E 's/,([ \t]*[}\]])/\1/g' broken.json > clean.json

# 校验修复结果
jq . clean.json >/dev/null && echo 'JSON is valid'

常见问题

JSON 修复与 JSON 格式化有什么区别?

JSON 格式化只对内容本身合法、仅缩进或空格不一致的 JSON 重新排版;JSON 修复则专门处理语法错误的 JSON,会先纠正尾逗号、单引号、注释、缺失括号等结构问题,再输出标准格式。当格式化工具报 SyntaxError 时,应当先使用 JSON 修复。

工具支持修复哪些常见的 JSON 语法错误?

工具内置智能修复算法,可处理以下高频问题:1) 尾随逗号(Trailing comma);2) 单引号代替双引号;3) 键名未加引号;4) 字符串未闭合;5) 包含 JavaScript 单行/块注释;6) 被 Markdown 代码块包裹的 JSON;7) 残缺结尾导致的大括号/方括号缺失。

为什么 AI 或大模型输出的 JSON 经常不标准?

大语言模型(如 ChatGPT、Claude、Gemini)生成的 JSON 经常带 Markdown 包裹(```json ... ```)、解释性前缀/后缀文字、尾逗号、注释或由于 Token 截断导致的不完整结构。JSON 修复专门针对这类场景优化,一键清洗 AI 输出为合法 JSON。

修复后的 JSON 在结构上一定和原始数据一致吗?

修复后输出的是符合 JSON 标准的合法字符串,数据语义在绝大多数情况下会保留。但由于修复基于启发式规则,遇到极端残缺或歧义场景(如同一行内多处都缺逗号)时,可能与原始意图略有偏差。建议对关键数据再使用 Schema 校验或人工复核。

为什么不直接用 Python json.loads 或 JavaScript JSON.parse?

原生解析器在遇到 SyntaxError 时只能报错,不能修复。JSON 修复是补充原生解析器之前的容错层:先尝试修复文本,再走原生解析器,确保最终输出可被严格 JSON 解析器消费。生产环境也可在服务端以相同思路进行预处理。

JSON5 / JSONC 里的注释会被保留吗?

不会。注释属于 JSON5 扩展语法而非标准 JSON 的一部分,工具会将其剥离以保证输出符合标准 JSON。如果希望保留注释,可继续使用 JSON5 源文件或 JSONC 工具链;如需将 JSON5 转为标准 JSON,本工具即可直接完成。

被截断的 JSON(比如流式输出被切断)能修复吗?

能。工具会尝试匹配缺失的右括号、方括号和字符串结束引号,并尽量保留已识别的内容。注意:如果被截断的位置正好在某个字符串字面量内部,可能需要手动补齐关键字符。

修复后的 JSON 会出现数据丢失吗?

在常见修复场景中(去尾逗号、加引号、补全括号、剥离注释),数据语义都会被完整保留。极少数情况下,当原始内容存在不可逆歧义(例如嵌套层数被破坏)时,工具会尽量保守修复并保持原样输出;不会主动删除字段或键。

可以批量修复多个 JSON 吗?

本工具按单次输入修复。批量场景推荐先在本地用脚本(如 Python 的 jsonrepair 库、josdejong/jsonrepair npm 包)调用底层算法处理,再将结果导入本工具进行人工校验与格式化。

修复后还需要再做格式化和 Schema 校验吗?

推荐。修复主要解决语法层面的错误,格式化和 Schema 校验则保证可读性与业务正确性。修复工具的输出会与 GeekFormat 的 JSON 格式化、Schema 校验、代码生成等工具无缝衔接。

工具会上传我的 JSON 到服务器吗?

不会。所有解析、修复、格式化均在浏览器本地完成,输入与中间结果都不会发送到任何服务器。可离线使用,适合处理含敏感信息(如生产环境 API 响应、内部配置)的 JSON。

可以固定每次使用的修复策略吗?

本工具默认开启全部常见修复规则以保证成功率。如果需要针对特定语言/团队的规范进行精细控制,可在生产环境中使用 jsonrepair 库并按需启用或关闭某些规则,本工具的输出也可作为后续校验的标准化输入。

故障排查

「无法修复此 JSON」错误

原因:输入文本存在严重结构损坏,例如多处括号缺失、字符串字面量被截断、字符集被破坏。解决方法:先用纯文本编辑器打开原始文件,确认编码为 UTF-8 没有 BOM、且非压缩二进制;若数据来自 API 响应可联系上游补全;对极端残缺的数据集建议直接用源文件。

修复后字段被移到错误位置

原因:原文中注释或字符串字面量包含 JSON 语法字符(如 //、/*、})造成解析器误判;或嵌套层级过深导致括号匹配错位。解决方法:手工将字符串中的 //、/* 用反斜杠转义;对嵌套深的数据先在外层增加临时括号或换行再修复。

AI 输出里包含解释性文字未被剥离

原因:AI 输出常以自然语言开头/结尾(如「下面是结果:」),且可能跨多行。解决方法:先用文本编辑器删掉 JSON 块外的文字,仅保留最外层 ```json 包裹的内容;如工具仍无法识别,可手动加上最外层的 { } 后再修复。

修复后大小没变或部分字符被替换

原因:原文里包含反斜杠、Unicode 转义或 HTML 实体,被工具按 JSON 规则重新转义。解决方法:确认原文是否在 JS 字符串中嵌套;若在 HTML 页面中可先用 HTML Decode 还原;转义后字符变多属正常现象。

浏览器提示「内存不足」或页面卡死

原因:单次输入超过 5–10 MB 时浏览器会承受较大内存压力。解决方法:把数据拆成多个小批次(每次 1–2 MB);或在服务端使用 jsonrepair 库做流式处理;修复后结果与原文相差不大属于正常。

修复后 Schema 校验仍报错

原因:JSON 修复只解决语法层错误,不负责业务字段名、类型或取值是否符合 Schema。解决方法:使用 GeekFormat 的 JSON Schema 校验工具检查字段约束;按报错定位具体字段并人工修正。

术语表

JSON
JavaScript Object Notation,一种基于键值对的轻量级数据交换格式,定义于 RFC 8259,是 REST API、配置文件、日志的事实标准。
RFC 8259
IETF 发布的 JSON 官方规范,定义合法 JSON 的严格语法——所有键必须用双引号、字符串中只有有限几个字符需要转义、不允许注释和尾随逗号。
JSON.parse
JavaScript / 现代浏览器内置的严格 JSON 解析器,遵循 RFC 8259;遇到任何语法错误直接抛 SyntaxError,不能容错修复。
JSON5
JSON 的扩展语法(非标准),允许未加引号键、单引号字符串、注释(// 和 /* */)、尾随逗号、十六进制数字等,更适合人类手写但不兼容 JSON.parse。
JSONC
JSON with Comments,VS Code 等编辑器对带注释 JSON 配置文件的统称(如 tsconfig.json),实际上是 JSON5 的一个常见别名。
Trailing Comma / 尾随逗号
对象或数组最后一个元素后多余的逗号,JavaScript 允许但 JSON 标准禁止,是 LLM 输出和 console.log() 复制最常见的语法错误。
Markdown 代码块
由三个反引号(```)包裹的代码片段,LLM 在输出 JSON 时常会自动加 ```json ... ``` 包裹,直接粘贴到 JSON.parse() 会失败。
Tolerant Parser / 容错解析
能在遇到语法错误时尝试恢复并继续解析的解析器;JSON 修复工具的核心引擎,区别于严格的 JSON.parse。
SyntaxError
JavaScript 抛出的语法错误异常;严格 JSON 解析器在遇到任何不符合 RFC 8259 的输入时都会抛此错误。
Canonical JSON / 规范化 JSON
经过 parse + stringify 重新生成的 JSON,键名顺序稳定、无多余空白、100% 兼容标准解析器,是 JSON 修复工具的最终输出格式。

JSON 修复常见错误类型与示例

错误类别原始写法修复后修复方式
尾随逗号{ "a": 1, }{ "a": 1 }移除最后一个元素后的逗号
单引号{ 'a': 1 }{ "a": 1 }把所有单引号替换为双引号
未加引号键{ a: 1 }{ "a": 1 }为键名补上双引号
单行注释{ // 注释 "a": 1 }{ "a": 1 }剥离 // 整行注释
块注释{ /* 块 */ "a": 1 }{ "a": 1 }剥离 /* */ 块注释
Markdown 包裹```json\n{ "a": 1 }\n```{ "a": 1 }移除 ```json 与 ``` 包裹
字符串未闭合{ "a": "hello }{ "a": "hello" }补齐缺失的字符串结束引号
括号缺失{ "a": 1{ "a": 1 }按栈式匹配补齐右大括号/方括号

JSON 修复 vs JSON 格式化 vs JSON Schema 校验

工具解决什么问题输入要求失败模式
JSON 修复把语法错误的 JSON 转为合法 JSON可容错,接受非标准 JSON残缺到无法猜测结构时报错
JSON 格式化对合法 JSON 重新排版必须已是合法 JSONSyntaxError 直接报错
JSON 压缩去除空白,减小体积必须已是合法 JSONSyntaxError 直接报错
JSON Schema 校验检查字段类型/取值是否符合业务约束必须已是合法 JSON列出每个字段违反的规则
JSON Merge/Sort多源合并 / 键名排序必须已是合法 JSONSyntaxError 直接报错

Authoritative References