JSON 语法规则与常见错误

JSON 的语法本身很小,一个引号或逗号写错,整段文本就无法解析。 下面先说清 JSON 允许什么,再逐条看最高频的几类「JSON 语法错误」, 最后演示怎么把报错定位到具体的行号与列号。

一、JSON 只支持六种数据类型

无论结构多复杂,JSON 的值最终都由下面六种类型组成(RFC 8259):

  • 对象 object:花括号 { },由键值对组成,键必须是字符串。
  • 数组 array:方括号 [ ],元素类型可不同。
  • 字符串 string:必须用 英文双引号 " " 包裹。
  • 数字 number:整数或浮点,不支持 NaN、 Infinity、前导零( 0123)与十六进制。
  • 布尔 boolean:只能是 true 或 false。
  • 空值 null:小写 null。

而 JSON 里 没有 undefined、函数、注释、单引号字符串,也没有尾随逗号。 很多「JSON 报错」其实是把它当成 JavaScript 对象字面量来写了。

二、三条最容易被违反的硬规则

1. 键名与字符串必须用双引号

裸键名(不带引号)和单引号在 JavaScript 里合法,在 JSON 里都不合法:

错误写法

{name: "Tom"}
{'name': 'Tom'}

正确写法

{"name": "Tom"}

校验时工具会给出中文提示,例如「属性名必须用双引号包裹,不能用单引号或裸 key」, 期望 token 显示为 "键名"。

2. 禁止尾随逗号(trailing comma)

对象或数组的最后一个元素后面不能有多余的逗号。 这是从 JavaScript / TypeScript 迁移过来时最高频的错误:

错误写法

{
  "name": "Tom",
}

正确写法

{
  "name": "Tom"
}

对应提示为「此处不应出现 },可能是多余的右花括号,或上一项缺少逗号」。

3. 整份文本只能有一个根元素

把多个对象直接并列会触发「JSON 主体已结束但仍有多余字符」;多条数据应当用数组包裹:

错误写法

{"id": 1}
{"id": 2}

正确写法

[{"id": 1}, {"id": 2}]

三、其他高频错误

  • 缺少逗号或逗号多余。 相邻键值对之间漏写逗号会提示「此处期望属性名或 },可能是上一项缺少逗号」,连续两个逗号则提示「此处不应出现逗号」。
  • 冒号写反或写漏。"a" 1 这类会提示「属性名后面期望 :」。
  • 字符串里含未转义的控制字符。 字符串内部直接换行、制表符是不允许的,必须写成 \n、 \t 等转义序列,否则提示「包含未转义的控制字符」。
  • 括号或引号未闭合。 少写一个 }、 ] 或引号,会得到「JSON 提前结束,可能是括号、引号或花括号未闭合」。
  • 数字格式不合法。 前导零、多个小数点、十六进制( 0xFF)都会提示「数字格式不合法」。

四、如何快速定位到出错的位置

浏览器原生报错只给出一个 position N 字符偏移量,长文本里非常难数。本站的两个工具把它翻译成了「第 X 行,第 X 列」加中文说明:

  1. 用 JSON 格式化 粘贴文本并格式化,出错行会整行高亮、行号出现标记,直接跳到问题所在。
  2. 用 JSON 校验 边输入边自动校验,底部状态栏给出「第 X 行,第 X 列」,并附「期望出现什么 token」的提示。
  3. 需要查看或生成转义序列时,用 JSON 转义 / 反转义 处理引号、换行与 Unicode。

举例:输入 {'a': 1} 这类使用单引号的文本,工具会定位到 第 1 行第 2 列,并提示「JSON 不允许使用单引号,键名与字符串值必须用双引号(期望 " )」。

五、一张速查表

规则允许不允许
键名引号"key"key、'key'
尾随逗号[1, 2][1, 2,]
根元素单个对象 / 数组多个并列的根值
注释—//、/* */
字符串换行\n字符串内直接回车

现在就验证你的 JSON

粘贴文本即可自动校验并定位错误,全部在浏览器本地完成,数据不会上传。

常见问题

为什么我的 JSON 看起来没问题,却还是解析报错?

最常见的原因是存在肉眼不可见的字符:文本开头带 BOM(\uFEFF)、从网页或文档复制的全角引号(“ ”)与全角逗号(,)、或字符串里直接换行。核对时请确认引号是英文半角双引号 ",并删除开头多余的不可见字符;也可以用在线转义工具查看字符本身。

JSON 允许写注释吗?

标准 JSON(RFC 8259)不允许任何注释,// 与 /* */ 都会导致解析失败。如果你的配置来自允许注释的方言(如 JSONC、JSON5),需要先去掉注释再交给标准 JSON 解析器;本工作台的所有工具都按标准 JSON 解析。

报错里的 “Unexpected token … in JSON at position N” 该怎么读?

position N 是从 0 开始的字符偏移量,直接数 position 很容易数错。本工作台把该偏移换算成「第 X 行,第 X 列」,并翻译成中文说明与「期望出现什么」,例如单引号会被解释为「JSON 不允许使用单引号,键名与字符串值必须用双引号(期望 " )」。

一份 JSON 文件可以包含多个根对象吗?

不可以。JSON 规定整份文本只能有一个根元素。若同一次传输里有多条记录,请用数组包裹,例如 [{"id":1},{"id":2}];把所有对象直接并列会导致「JSON 主体已结束但仍有多余字符」的错误。

用这些工具检查 JSON 会上传我的数据吗?

不会。本站所有工具都是纯前端实现,解析、校验与转义全部在浏览器本地(Web Worker)完成,没有后端服务与数据库。你可以打开浏览器开发者工具的 Network 面板自行验证:除加载页面所需的静态资源外,没有任何携带你数据的请求。

相关工具