UPTools UPTools
开发 主笔:工具匠

JSON 解析失败怎么排查?常见报错与修复

JSON 是现代 Web 开发里最常见的轻量级数据格式,从接口返回值到配置文件几乎无处不在。但它的语法非常严格——多一个逗号、用错一个引号,整段 JSON 就会解析失败。本文整理 JSON 最常见的几类解析报错,以及快速定位和修复的方法。

JSON 的语法为什么这么严格

JSON 的设计目标是「解析简单、无歧义」,所以它只允许两种结构:对象(键值对)和数组(有序列表)。为了做到无歧义,它定了几条硬规则:

  • 字符串和键都必须用双引号,单引号或不加引号都不行。
  • 不支持注释///* */ 都会报错。
  • 最后一个元素后面不能有逗号(尾逗号)。

这些限制在 JavaScript 对象字面量里是允许的,所以很多人会把 JS 对象和 JSON 搞混。浏览器的 JSON.parse() 完全遵循上述规则,一旦违反就抛出 SyntaxError

常见报错与修复

1. 键或字符串用了单引号

{ 'name': 'UPTools' }

JSON 要求双引号,上面这样会报错。改成:

{ "name": "UPTools" }

2. 多余的尾逗号

{
  "a": 1,
  "b": 2,
}

最后一个元素后的逗号在 JSON 里非法,删掉即可。这是从 JS 对象复制过来时最容易踩的坑。

3. 写了注释

{
  // 这是配置
  "debug": true
}

JSON 不支持注释。如果确实需要说明,可以用一个字段代替,比如 "_comment": "这是配置"

4. 键没有加引号

{ name: "UPTools" }

键必须用双引号包裹,写成 "name"

如何定位错误位置

JSON.parse() 抛出的报错信息里通常带有位置信息,比如 Unexpected token } in JSON at position 42。这里的 position 42 指出错字符在第 42 个字符(从 0 开始数)。把原文粘进格式化工具,定位到对应位置,往往一眼就能看出是多了一个逗号还是少了引号。

一个实用技巧:从报错位置往前看,问题往往在前一个 token——比如报错指向 },真正的问题通常是它前面的逗号。

用工具快速排查

手动数字符位置效率很低。更快的办法是直接用在线 JSON 格式化工具:把内容粘进去,工具会自动定位到第一个出错的位置并给出提示,修正后还能一键美化,方便阅读多层嵌套结构。

如果你经常和接口返回值打交道,可以把 UPTools JSON 格式化工具 收藏起来,调试时直接粘贴使用。

总结

JSON 解析失败几乎都源于四类问题:单引号、尾逗号、注释、键无引号。记住「双引号、无注释、无尾逗号」这三条,配合报错里的 position 信息或格式化工具,绝大多数 JSON 解析错误都能在几秒内解决。

相关文章