JSON 常见错误排查与修复完全指南

2 阅读6分钟

📅 2026-03-24⏱ 阅读约 10 分钟👤 适合所有开发者

本文目录

  1. 错误1:尾随逗号
  2. 错误2:使用单引号
  3. 错误3:键名不加引号
  4. 错误4:字符串内未转义双引号
  5. 错误5:使用 undefined
  6. 错误6:添加注释
  7. 错误7:数字格式不合法
  8. 错误8:括号不匹配
  9. 错误9:字符串包含未转义换行
  10. 错误10:日期格式误用
  11. 如何快速定位错误

JSON 语法极其严格,一个多余的逗号、一个单引号,都会导致整段 JSON 无法解析。本文详细分析 10 种最常见的 JSON 错误,每种都附有错误代码、原因解释和修复方法,帮助你快速排查和解决问题。

💡 遇到 JSON 报错时,最快的方式是把数据粘贴到 JSON 验证工具 中,它会精确指出错误位置。

错误1:尾随逗号(Trailing Comma)

这是最最常见的 JSON 错误,尤其对 JavaScript 开发者来说——因为 JS 对象和数组是允许尾随逗号的,习惯了 JS 写法的开发者很容易把这个习惯带到 JSON 里。

规则: JSON 对象的最后一个键值对后面、数组的最后一个元素后面,绝对不能有逗号。

❌ 错误写法

{
  "name": "张三",
  "age": 28,
  "city": "北京",   ← 多余的逗号!
}

✅ 正确写法

{
  "name": "张三",
  "age": 28,
  "city": "北京"    ← 最后一项不加逗号
}

数组同理:

❌ 错误写法

["苹果", "香蕉", "橙子",]

✅ 正确写法

["苹果", "香蕉", "橙子"]

如果你在使用 JSON5、JSONC 等 JSON 扩展格式,它们允许尾随逗号,但标准 JSON 不行。

错误2:使用单引号

JSON 规范明确要求字符串必须使用双引号,单引号在任何情况下都不合法——无论是键名还是字符串值。

❌ 错误写法

{'name': '张三', 'age': 28}

✅ 正确写法

{"name": "张三", "age": 28}

这个错误在从 Python 代码中复制数据时特别常见,因为 Python 字典默认使用单引号打印。解决方法是在 Python 中使用 json.dumps(data) 来序列化,而不是直接用 str(data)print(data)

错误3:键名不加引号

JavaScript 对象的键名可以不加引号(如 {name: "张三"}),但 JSON 要求键名必须是双引号字符串,这是两者的重要区别之一。

❌ 错误写法(JavaScript 对象字面量写法)

{name: "张三", age: 28, isAdmin: true}

✅ 正确写法(JSON 格式)

{"name": "张三", "age": 28, "isAdmin": true}

错误4:字符串内含有未转义的双引号

如果字符串的内容本身包含双引号,必须用反斜杠 " 进行转义,否则 JSON 解析器会误认为字符串提前结束了。

❌ 错误写法

{"message": "他说 "你好" 然后离开了"}

✅ 正确写法

{"message": "他说 "你好" 然后离开了"}

同理,反斜杠本身也需要转义:

❌ 错误写法

{"path": "C:\Users\zhangsan\Documents"}

✅ 正确写法

{"path": "C:\Users\zhangsan\Documents"}

💡 使用 JSON 转义工具 可以一键处理所有需要转义的字符,避免手动操作出错。

错误5:使用 undefined

undefined 是 JavaScript 特有的值,JSON 规范中根本不存在这个概念。如果你的数据有"无值"的情况,应该用 null 替代。

❌ 错误写法

{"name": "张三", "nickname": undefined, "phone": undefined}

✅ 正确写法

{"name": "张三", "nickname": null, "phone": null}

⚠️ 注意:在 JavaScript 中,JSON.stringify() 会直接忽略值为 undefined 的字段(而不是转成 null),这可能导致意外的数据丢失。

错误6:添加注释

JSON 完全不支持任何形式的注释,这是很多开发者没想到的。配置文件里加注释的需求非常常见,但标准 JSON 做不到。

❌ 错误写法

{
  // 用户基本信息
  "name": "张三",
  "age": 28, /* 年龄字段 */
  "role": "admin"
}

✅ 正确写法

{
  "name": "张三",
  "age": 28,
  "role": "admin"
}

如果你确实需要注释,可以考虑以下替代方案:

  • JSONC(JSON with Comments):VS Code 的 settings.json 使用这种格式,支持 // 注释
  • JSON5:JSON 的超集,支持注释、尾随逗号、单引号等
  • YAML:支持 # 注释,适合配置文件
  • 约定字段:在 JSON 中用 "_comment" 这样的特殊字段名作为注释(不推荐,但某些场景可用)

我们的 JSON格式化工具 支持智能识别并自动剥离 // 注释,让含注释的 JSON 也能正常格式化。

错误7:数字格式不合法

JSON 对数字格式有严格要求,以下写法均不合法:

❌ 错误写法

{
  "hex": 0xFF,          // 不支持十六进制
  "octal": 0755,        // 不支持八进制
  "leadingZero": 07,    // 不允许前导零
  "nan": NaN,           // NaN 不是 JSON 值
  "pos_inf": Infinity,  // Infinity 不是 JSON 值
  "neg_inf": -Infinity  // -Infinity 不是 JSON 值
}

✅ 正确写法

{
  "hex": 255,
  "octal": 493,
  "leadingZero": 7,
  "nan": null,
  "pos_inf": null,
  "neg_inf": null
}

错误8:括号不匹配

大型 JSON 数据中,嵌套层级深,括号容易不匹配。常见情况:多了一个闭合括号,或者少了一个。

❌ 错误写法

{
  "user": {
    "name": "张三",
    "address": {
      "city": "北京"
    }
  }
}}  ← 多了一个 }

这类错误靠肉眼很难发现,最有效的方法是使用格式化工具——它会立即标出错误位置。

错误9:字符串包含未转义的换行符

JSON 字符串必须在一行内表示,不能直接包含字面量换行符(回车/换行)。如果字符串内容需要换行,必须使用 \n 转义。

❌ 错误写法(字符串内包含实际换行)

{"address": "北京市
朝阳区"}

✅ 正确写法

{"address": "北京市\n朝阳区"}

错误10:日期格式误用

JSON 没有原生的日期类型,日期只能用字符串或数字(Unix 时间戳)表示。直接写 JavaScript 的 Date 对象是无效的。

❌ 错误写法

{"createdAt": Date("2024-01-15")}

✅ 正确写法(ISO 8601 字符串,推荐)

{"createdAt": "2024-01-15T10:30:00Z"}

✅ 正确写法(Unix 时间戳)

{"createdAt": 1705312200}

如何快速定位和修复 JSON 错误

方法1:使用在线验证工具(最推荐)

将 JSON 粘贴到 JSON验证工具 中,它会立即显示:错误类型、发生错误的行号和列号,大幅减少手动排查时间。

方法2:查看错误信息

浏览器控制台或后端日志中的 JSON 解析错误通常会告诉你问题位置:

// 浏览器 JSON.parse() 报错
SyntaxError: Unexpected token } in JSON at position 47

// Python json.loads() 报错
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 5 column 3 (char 47)

根据错误信息中的位置(行号、列号或字符偏移量),直接跳到对应位置检查。

方法3:二分法排查

对于超大 JSON,可以用"二分法"快速定位:先取前一半数据验证,如果无误说明问题在后半段;再取后半段的前一半验证……以此类推,迅速缩小范围。

方法4:代码生成 JSON

不要手写 JSON,而是在代码中构建数据结构后用库序列化。例如 JavaScript 的 JSON.stringify(obj)、Python 的 json.dumps(dict),这些库会自动处理所有转义和格式问题。

相关文章推荐

📖 什么是JSON?

完整入门指南

💻 各语言JSON处理

JS/Python/Java/Go示例

⚖️ JSON vs XML vs YAML

格式深度对比

🚀 JSON进阶技巧

Schema验证与JSONPath

🔌 JSON与REST API

API设计最佳实践