JSON 格式化常见错误:10 个你一定踩过的坑

JSON 前端 开发者工具

JSON 格式化常见错误:10 个你一定踩过的坑

后端返回的 JSON 解析失败,浏览器控制台一堆红色错误,但肉眼看不出问题在哪。本文列了 10 个最常见的 JSON 解析失败原因,每个都附修复示例和验证方法。

想在线验证 JSON?打开 RuMystic JSON 格式化工具 — 粘贴即报错位置,本地处理不上传。


1. 尾随逗号

{
  "name": "RuMystic",
  "tools": 39,
}

最后一项后面多了个逗号。Python json.loadsExpecting property name enclosed in double quotes,JS JSON.parseUnexpected token }

修复:删掉尾逗号。

{
  "name": "RuMystic",
  "tools": 39
}

注意:JSON5 和 JSONC 允许尾逗号,但标准 JSON 不允许。


2. 单引号字符串

{
  'name': 'RuMystic'
}

JSON 只允许双引号。这是从 JavaScript 字面量复制粘贴时最常见的坑。

修复:把所有单引号换成双引号。

{
  "name": "RuMystic"
}

3. 注释

{
  // 这是配置
  "name": "RuMystic"
}

JSON 不支持注释。这是 Crockford 当年故意去掉的。

修复:要么删掉注释,要么用 JSONC/JSON5(需要对应解析器),要么把注释放到一个字段里。

{
  "_comment": "这是配置",
  "name": "RuMystic"
}

4. 键名未加引号

{
  name: "RuMystic",
  version: 1
}

JSON 要求所有键名必须用双引号。JavaScript 对象字面量允许不加,但 JSON 不行。

修复

{
  "name": "RuMystic",
  "version": 1
}

5. 特殊字符未转义

{
  "path": "C:\Users\Zen\file.txt",
  "regex": "\d+"
}

JSON 字符串中 \ 必须转义为 \\。常见出错位置:Windows 路径、正则表达式。

修复

{
  "path": "C:\\Users\\Zen\\file.txt",
  "regex": "\\d+"
}

JSON 字符串必须转义的字符:

  • \" 双引号
  • \\ 反斜杠
  • \/ 斜杠(可选,但建议)
  • \b 退格
  • \f 换页
  • \n 换行
  • \r 回车
  • \t 制表符
  • \uXXXX Unicode

6. 字符串里有未转义的换行

{
  "description": "第一行
第二行"
}

JSON 字符串不能跨行。换行必须用 \n

修复

{
  "description": "第一行\n第二行"
}

7. 数字格式错误

{
  "hex": 0xFF,
  "leading-dot": .5,
  "plus": +42,
  "nan": NaN,
  "infinity": Infinity
}

JSON 数字只能是十进制,不能有前导点、前导加号、十六进制、NaNInfinity

修复

{
  "hex": 255,
  "leading-dot": 0.5,
  "plus": 42,
  "nan": null,
  "infinity": null
}

8. 用了 JavaScript 字面量

{
  "created": new Date(),
  "regex": /pattern/g,
  "func": function() { return 1; },
  "undefined": undefined
}

JSON 不支持任何 JavaScript 表达式,包括 Date 对象、正则字面量、函数、undefined

修复:全部转成字符串或 null。

{
  "created": "2026-07-01T00:00:00.000Z",
  "regex": "/pattern/g",
  "func": null,
  "undefined": null
}

9. BOM 头

文件以 \uFEFF 开头(UTF-8 BOM)。部分编辑器默认加 BOM,导致 JSON.parseUnexpected token \uFEFF

修复:用编辑器另存为「UTF-8 无 BOM」。或者代码里先 strip:

const json = raw.replace(/^\uFEFF/, '');
const data = JSON.parse(json);

10. 编码不一致

文件存成 GBK 或 Latin-1,但解析器按 UTF-8 读。中文变乱码,可能报解析错误。

修复:所有 JSON 文件统一存 UTF-8 无 BOM。


快速排查流程

  • 用工具验证 — 粘贴到 RuMystic JSON 格式化工具,立刻看到错在哪一行哪一列。
  • 看错误信息JSON.parse 的报错通常带位置,但位置可能偏移 1-2 个字符。
  • 二分查找 — 如果错误位置不明确,删掉一半内容看是否还报错,逐步定位。
  • 对比正确样本 — 拿一个肯定正确的 JSON 对比结构,看少了什么。

  • 工具推荐

    • 在线验证RuMystic JSON 格式化 — 本地处理,敏感数据不离开浏览器
    • 命令行python -m json.tool file.jsonjq . file.json
    • 编辑器:VS Code 自带 JSON 验证,红色波浪线标错

    总结

    10 个坑里有 8 个是「JavaScript 习惯」带到 JSON 的。记住一条:JSON 是 JSON,不是 JavaScript。键名加双引号、值不能是表达式、不能有注释、不能有尾逗号。

    剩下的两个(BOM 和编码)是文件层面的,编辑器设置对一次就再也不踩。

    下次遇到 JSON 解析失败,先丢到 RuMystic JSON 格式化 里跑一遍,5 秒定位问题。