Jaison:专为大模型时代设计的容错 JSON 解析器
在日常开发中,我们越来越依赖大语言模型(LLM)来生成结构化数据,尤其是 JSON 格式的输出。但几乎每个用过 GPT、Claude、Gemini、通义千问、文心一言、深蓝等模型的开发者都遇到过同样头疼的问题:
模型输出的 JSON 经常“看起来很像”,但直接丢给 JSON.parse 就直接炸了。
缺个括号、多了个逗号、用了中文冒号(:)、带了 “`json
Jaison 就是专门为这种场景诞生的纯 JavaScript 容错 JSON 解析器,它能在单次扫描中自动修复几十种 AI 常见的结构性错误,并直接返回可用的 JavaScript 对象。
下面我们一步步来看看它到底能解决哪些实际问题,以及该怎么用。
为什么需要一个专门的容错 JSON 解析器?
标准 JSON.parse 遵循的是 RFC 8259 规范,容错能力几乎为零。任何一点语法错误都会导致整个解析失败。
而大语言模型生成 JSON 时经常出现的情况包括:
-
响应被截断,只输出一半(流式输出常见) -
为了可读性加了 // 注释或 /* */ 注释 -
使用了中文全角标点: {"name":"张三","age":18} -
键没有加双引号: {name: "Lucy", age: 20} -
混用单引号和双引号 -
结尾多余的逗号或缺失的括号 -
被 “`json 代码块包裹 -
布尔值、null 没写完: tru、fals、nul
这些对人来说完全可以理解,但对 JSON.parse 来说就是致命错误。
Jaison 的目标很简单:让 AI 生成的 JSON 真正“能用”。
Jaison 能自动修复哪些常见问题?
下面列出它实际支持的修复能力,每一项都附带真实示例:
这些修复几乎覆盖了国内国外所有主流大模型在实际生产环境中出现的 95% 以上的 JSON 问题。
安装与最基础的使用方式
npm install jaison
const jaison = require('jaison');
// 直接拿到解析后的对象(成功时)
const data = jaison('{"name": "张三", "age": 30}');
console.log(data); // { name: '张三', age: 30 }
// 需要处理失败情况时用 try/catch
try {
const result = jaison(aiGeneratedString);
// 直接使用 result
} catch (err) {
console.error('Jaison 也无法修复:', err.message);
}
API 就一个函数,没有复杂配置,越简单越不容易出错。
什么情况下应该用 Jaison,什么情况下仍然用 JSON.parse?
简单记忆法则:只要数据来源是人或者大模型,先扔给 Jaison。
性能实测数据(基于 55 万次测试)
结论:在合法 JSON 上 Jaison 确实慢一些,但在 malformed JSON 上它是唯一能用的。
常见问题解答(FAQ)
Jaison 能解析文本中间夹着的 JSON 吗?
不能。它要求输入要么是纯 JSON,要么是 “`json 包裹的 JSON。如果前面还有大段文字,需要你先用正则或其它方式提取出来。
它会改变原始数据的语义吗?
极少情况下会。比如连续两个逗号 1,,2 会被补成 [1,null,2],这是最合理的修复方式。绝大部分修复都是“最小干预”原则。
支持 BigInt 吗?
目前跟原生 JSON.parse 一样,把 123n 当作普通字符串处理。如果需要 BigInt,建议解析后再手动转换。
能处理循环引用吗?
不能。JSON 本身就不支持循环引用,Jaison 也不支持。
在浏览器里能直接用吗?
可以,完全是纯 JavaScript,无任何依赖,支持所有现代浏览器和 Node.js。
它安全吗?能防止注入攻击吗?
Jaison 只解析 JSON,不会执行代码。只要你不把解析后的对象直接塞进 eval,应该跟 JSON.parse 一样安全。
HowTo:快速把 Jaison 接入现有项目
// utils/safeJsonParse.js
const jaison = require('jaison');
function safeParse(jsonStr) {
if (typeof jsonStr !== 'string') return null;
try {
return jaison(jsonStr);
} catch (e) {
console.warn('Jaison 也解析失败', e.message);
return null;
}
}
module.exports = safeParse;
然后在所有接收 AI 输出的地方:
const safeParse = require('./utils/safeJsonParse');
const result = safeParse(llmResponse);
if (result) {
// 放心使用
}
三行代码搞定,再也不用为缺个括号抓狂。
写在最后
Jaison 并不是要取代 JSON.parse,而是成为它在“野外环境”下的完美搭档。
当你面对的是:
-
国内用户输入的中文标点 -
各种大模型千奇百怪的输出习惯 -
实时流式响应可能被截断 -
需要极高可靠性的生产系统
Jaison 几乎是目前唯一开箱即用的解决方案。
它只有一个函数,却能帮你省下无数个深夜调试“Unexpected token”的时间。
项目地址:https://www.npmjs.com/package/jaison
GitHub:欢迎 star & 提交国内模型特有的 malformed 示例,越多人贡献,修复能力越强。
希望这个小工具能让你的 AI 应用更稳定、更丝滑。祝编码愉快!

