JavaScript 原生 JSON.parse() 不支持容错解析,需借助 jsonrepair.js 实现智能修复,可处理单引号、缺引号、多逗号、括号不闭合、注释及混合文本等常见问题,并支持浏览器和 Node.js 环境。

JavaScript 本身没有内置的 JSON 修复能力,原生 JSON.parse() 遇到不规范格式会直接报错,比如单引号、缺引号、多逗号、括号不闭合、含注释等。但你可以用轻量、可靠的方式实现容错解析——核心思路是:先尝试修复字符串,再交给 JSON.parse()。
用 jsonrepair.js(推荐)替代原生解析
这是 json-repair 的官方 JavaScript 版本(与 Python 库同源),专为浏览器和 Node.js 设计,能智能处理 LLM 输出、爬虫数据、手写配置等常见脏 JSON。
- 安装(Node.js):
npm install jsonrepair - 浏览器引入:
<script src="https://cdn.jsdelivr.net/npm/jsonrepair@2/dist/jsonrepair.umd.js"></script> - 基础用法:
const { repair } = jsonrepair;
const broken = "{name: 'Alice', age: 25, city: 'Beijing'}";
const fixed = repair(broken); // → '{"name":"Alice","age":25,"city":"Beijing"}'
const obj = JSON.parse(fixed); // ✅ 成功解析
修复典型问题示例
它能自动应对这些常见错误:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
立即学习“Java免费学习笔记(深入)”;
-
单引号 → 双引号:
"{ 'name': 'Bob' }"→{"name":"Bob"} -
键名无引号:
{id: 101, status: true}→{"id":101,"status":true} -
结尾缺括号:
'{"user":{"name":"Tom"'→ 补全为{"user":{"name":"Tom"}} -
多余逗号:
[1, 2, 3, ]→[1,2,3] -
内嵌换行/引号未转义:
"{"msg": "He said "Hi!""}"→ 自动转义为合法格式
配合正则做轻量预处理(备用方案)
对极简单场景(如仅单引号问题),可快速替换,但不推荐单独依赖正则,容易误伤内容或漏修嵌套结构:
function safeParse(str) {
try {
return JSON.parse(str);
} catch (e) {
// 简单兜底:只换外层单引号(慎用)
const patched = str.replace(/'([^']+)':/g, '"$1":')
.replace(/: '([^']+)'/g, ': "$1"');
return JSON.parse(patched);
}
}
处理带干扰文本的 LLM 输出
大模型常返回类似 "以下是 JSON 格式结果:\n{...}" 的混合内容。可用 repair() 的 skipInvalidChars: true 选项自动剥离非 JSON 前缀/后缀:
const output = "
{ name: 'Lucy' }";
const obj = JSON.parse(repair(output, { skipInvalidChars: true })); // ✅ 提取并修复

















