JSON 解析报错:常见的六个原因
Unexpected token 这个报错,前端后端都见过。它只告诉你位置,不告诉你原因。
下面六种,覆盖了大部分情况。
一、单引号
{'name': 'x'} 在 JavaScript 里合法,在 JSON 里非法。JSON 只认双引号。
从代码里复制对象字面量当 JSON 用,最容易踩这个。
二、尾逗号
{"a": 1, "b": 2,} 最后一个逗号是多余的。JS 允许,JSON 不允许。
数组同理,[1, 2, 3,] 也是错的。
三、注释
// 说明 和 /* 说明 */ 都不合法。
有些配置文件支持注释,那是 JSONC 或 JSON5,不是标准 JSON。用标准解析器读带注释的文件,一定报错。
四、键没加引号
{name: "x"} 是 JS 对象写法。JSON 要求键必须是双引号字符串。
五、转义问题
字符串里直接出现双引号、反斜杠、真实换行,都会破坏结构。
比如从 Excel 复制的多行文本,里面带真实换行,贴进 JSON 就废了。要转成 \n。
六、BOM 头
Windows 记事本保存 UTF-8 时可能加一个不可见的 BOM。人眼看不出,解析器会报“意外的字符”。
用编辑器的“以 UTF-8 无 BOM 保存”,或者用命令行去掉。
怎么快速定位
报错一般带行号和列号,但压缩过的 JSON 只有一行,列号可能几千。
把文本贴进 JSON 格式化工具,它会指出错误位置并尝试格式化。能看到结构,问题基本就露出来了。
改完再校验一次,别凭感觉判断“应该好了”。