DevFormatLab
← 返回博客列表

常见的 JSON 错误及其修复方法

作者 DevFormatLab·8 分钟阅读
JSON调试JavaScript教程

JSON(JavaScript 对象表示法)无处不在——API、配置文件、NoSQL 数据库、数据交换。但当它出错时,错误信息可能很难理解。本指南详细介绍最常见的 JSON 错误及其精确修复方法。

1. SyntaxError: Unexpected token(意外的符号)

这是最常见的 JSON 错误。意味着解析器在该位置遇到了无法解析的字符。

常见原因:

  • 尾部逗号{"name": "Alice",} — "Alice" 后面的逗号在 JSON 中是无效的(即使 JS 能接受)
  • 单引号:JSON 要求使用双引号:{'name': 'Alice'} 无效。必须是 {"name": "Alice"}
  • 未加引号的键名{name: "Alice"} — JSON 的键必须加引号
  • 注释:JSON 不支持 ///* */ 注释

如何修复:

将你的 JSON 粘贴到我们的 JSON 格式化工具 — 它会直接指向错误发生的行和列。错误信息中的字符偏移量通常是准确的。

2. SyntaxError: Unterminated string(未终止的字符串)

字符串字面量没有正确闭合。解析器在寻找结束引号的过程中到达了输入末尾。

常见原因:

  • 缺少结束引号:{"name": "Alice}
  • 字符串内未转义的引号:{"quote": "He said \"hello\""}
  • 字符串内换行:JSON 字符串不能跨多行,除非你将换行符转义

如何修复:

查看错误报告的位置。实际错误往往就在该位置之前。我们的 JSON 格式化工具会高亮显示未终止区域。

3. SyntaxError: Unexpected end of JSON input(JSON 输入意外结束)

在 JSON 结构完成之前,解析器就到达了文件末尾。

常见原因:

  • 被截断的网络响应(传输过程中连接中断)
  • 缺少闭合的大括号/中括号:{"users": [{"name": "Alice"} — 缺少闭合括号
  • 文件写入不完整

如何修复:

数一下你的开括号和闭括号数量。一个好的策略是正确缩进,然后检查缩进是否有意义。我们格式化工具的树视图会显示结构在何处过早终止。

4. ReferenceError: xxx is not defined(xxx 未定义)

当你尝试在 JavaScript 中直接使用 JSON 而没有将其作为字符串引用时,会发生这种情况。

// ❌ 错误 — 解析器看到的是字面的大括号,而不是字符串
const data = JSON.parse({"name": "Alice"});

// ✅ 正确 — 传入字符串
const data = JSON.parse('{"name": "Alice"}');

如何修复:

记住:JSON.parse() 接受一个包含 JSON 的字符串。如果你要将 JSON 粘贴到 JS 源码中,需要外层引号,并且内部引号要转义。我们的 JSON → String 工具 会自动处理。

5. 数字带前导零

除非数字恰好是 "0",否则 JSON 不允许数字上有前导零。

  • {"count": 042} → 无效
  • {"count": 42} → ✓ 有效
  • {"count": "042"} → ✓ 有效(它是字符串)

6. 无效的转义序列

JSON 只识别这些转义序列:\", \\, \/, \\b, \\f, \\n, \\r, \\t, \\uXXXX 等。其他如 \e\x1B 都是无效的。

调试 JSON 的专业技巧

  1. 先用格式化工具 — 粘贴到我们的 JSON 格式化工具中,获取精确的行/列位置
  2. 从外向内工作 — 在调试内部对象之前,先检查最外层结构是否正确闭合
  3. 增量验证 — 如果你有一个大的 JSON 文件,删除部分内容并重新验证,以隔离出包含错误的部分
  4. 与有效 JSON 进行比对 — 使用 JSON 比对工具 将你的畸形 JSON 与已知正确的模板进行比较

JSON 验证通过但仍不起作用时

有时 JSON 在语法上是有效的,但在语义上是错误的。例如:

  • 字符串与数字不匹配:"42" vs 42 — API 期望数字但得到了字符串
  • Null 与 undefined:JSON 有 null,没有 undefined — 省略一个键与将其设置为 null 是不同的
  • 大小写敏感:"Username" vs "username" — JSON 键是区分大小写的

对于这些情况,使用我们的 JSON 比对工具并排比较你的负载与工作示例。


本文中提到的所有工具都 100% 在你的浏览器中运行——你的数据永远不会离开你的设备。调试愉快!

相关工具