← 返回工具首页

什么是 JSON Parse Error?

JSON Parse Error 是 JavaScript 在尝试解析 JSON 字符串时发生的错误。当你的代码试图用 JSON.parse() 把一个字符串转成 JavaScript 对象,但字符串的格式不符合 JSON 规范时,就会抛出这个错误。

// 触发 JSON Parse Error 的典型情况
const jsonStr = '{"name": "Clover", age: 16}';
// age 没有加引号,不是合法的 JSON
JSON.parse(jsonStr);
// SyntaxError: Unexpected token 'a', ... is not valid JSON

const badJson = '{"greeting": "hello"}';  // 末尾多了不可见字符
JSON.parse(badJson);  // 可能报错:Unexpected end of JSON input

最常见的 5 种触发原因

1. 键或字符串值没加引号

JSON 标准要求所有键和字符串值必须用双引号包裹。单引号、不加引号都会报错。

// ❌ 错误示例
{"name": "Clover"}   // 正确
{name: "Clover"}    // 错误:键没引号
{'name': "Clover"}  // 错误:单引号不行

// ✅ 正确示例
{"name": "Clover"}

2. 尾部多余逗号

JavaScript 对象可以写尾部逗号,但 JSON 不允许。

// ❌ 错误
{"name": "Clover",}

// ✅ 正确
{"name": "Clover"}

3. 单引号或反引号作为字符串边界

// ❌ 错误
const data = JSON.parse("{'name': 'Clover'}");
// JavaScript字符串可以用单引号,但解析时JSON只认双引号

// ✅ 正确
const data = JSON.parse('{"name": "Clover"}');

4. 数字格式错误

JSON 数字不能有前导零(01),不能是非数字(NaNInfinity)。

// ❌ 错误
{"count": 007}     // 前导零
{"ratio": .5}      // 必须写 0.5
{"bad": NaN}       // JSON 里没有 NaN

// ✅ 正确
{"count": 7}
{"ratio": 0.5}
{"bad": null}      // 用 null 表示无值

5. BOM 头或隐藏字符

从文件或某些接口返回的 JSON 前面可能有 UTF-8 BOM(\uFEFF),肉眼看不见,但会导致解析失败。

const raw = '\uFEFF{"ok": true}';
JSON.parse(raw);  // SyntaxError: Unexpected token ''

// ✅ 解决:去掉 BOM
const clean = raw.replace(/^\uFEFF/, '');
JSON.parse(clean);  // OK

如何快速定位 JSON 错误?

手动找 JSON 里的格式问题很痛苦,最快的方法是用在线工具校验。

// 手动调试:在 JSON.parse 外面包 try-catch
try {
    const data = JSON.parse(responseText);
} catch (e) {
    console.error('JSON解析失败:', e.message);
    console.log('原始内容:', responseText);
    // 找到报错位置后,通常附近就是问题所在
}

// 进阶:用 reviver 函数获取具体路径
JSON.parse(text, (key, value) => {
    console.log('解析到:', key, value);
    return value;
});

后端返回的 JSON 报错了怎么办?

很多时候 JSON Parse Error 不是你的代码问题,而是后端返回的数据格式不对。

第一步:打印原始响应

fetch('/api/data')
    .then(r => r.text())  // 先不用 .json(),拿到原始文本
    .then(text => {
        console.log('原始响应:', text);
        // 检查:是否有意外的 HTML 包裹?是否有异常字符?
        return JSON.parse(text);
    })
    .catch(e => console.error(e));

第二步:检查 Content-Type

// 如果后端返回的是 text/html(错误页),解析 JSON 当然失败
// 响应头里应该是:
Content-Type: application/json; charset=utf-8

// 如果是:
Content-Type: text/html; charset=utf-8
// 说明后端报错了,返回的是 HTML 错误页面,不是 JSON

第三步:后端返回脏数据

有时后端数据库里存了特殊字符,或者序列化时出了问题,导致输出的 JSON 不规范。

// Node.js 调试:打印中间变量
const serialized = JSON.stringify(dataFromDB);
console.log(serialized);  // 看看是不是有乱码或多余字符

安全地解析 JSON(防止崩溃)

// 方法一:try-catch 包裹
function safeJsonParse(str, fallback = null) {
    try {
        return JSON.parse(str);
    } catch (e) {
        console.warn('JSON解析失败:', e.message);
        return fallback;
    }
}

// 方法二:先校验再解析(推荐性能敏感场景)
function isValidJson(str) {
    try {
        JSON.parse(str);
        return true;
    } catch { return false; }
}

// 方法三:使用 reviver 深度检查(生产环境推荐)
const data = JSON.parse(text, (key, value) => {
    if (typeof value === 'string' && value.includes('\u0000')) {
        throw new Error(`Null character in key: ${key}`);
    }
    return value;
});

常见错误对照表

错误信息原因解决方法
Unexpected token格式错误(引号/逗号/括号不匹配)用工具格式化并定位错误位置
Unexpected end of JSON input字符串被截断,或多了特殊字符检查是否有 BOM 头或多余字符
Expected ',' or '}'对象或数组里少了逗号/括号逐行检查格式
Expected property name or '}'键没有用双引号所有键必须用双引号

工具推荐

💡 遇到同类问题?用工具快速解决

试试这些配套工具,无需注册,打开即用

JSON 格式化

常见问题

Q: 遇到 json-parse-error什么意思,是什么原因导致的?
A: 常见原因有:数据格式不符合规范(如 JSON 多了逗号或少了引号)、字符编码不统一(UTF-8 和 GBK 混用)、特殊字符未正确转义,或接口返回了非标准数据。先用工具验证格式是最快的排查方式。
Q: json-parse-error什么意思 会影响程序正常运行吗?
A: 会的。格式错误会导致数据无法正常解析,轻则功能异常,重则程序崩溃。尤其是涉及支付、用户输入等关键流程时,这类问题必须第一时间修复。
Q: json-parse-error什么意思 有没有自动修复的办法?
A: 大多数格式问题可以用在线工具自动修复。如果是自己生成的 JSON/编码数据,修复后再重新提交即可;如果是第三方接口返回的格式问题,则需要联系对方修正或做容错处理。
Q: 修复后还需要注意什么?
A: 建议增加格式校验环节,在数据提交前或接收后先做格式验证(用 JSON.parse 或对应工具),避免再次出现同样问题。同时统一前后端编码规范,从源头减少这类错误。