去年带新同事联调接口,他盯着浏览器里的报错「Unexpected token } in JSON」抓耳挠腮,把前后端代码翻了个底朝天,最后发现是配置里多了一个逗号:「"name": "工具大全",}」。那个逗号,就是 JSON 语法里最经典的坑。JSON 看起来简单,但越是简单的东西,越容易在细节上翻车。这篇把它彻底讲透。
JSON 是什么?
JSON(JavaScript Object Notation,JavaScript 对象表示法)是一种轻量级的数据交换格式。它最初从 JavaScript 里长出来,但因为简单、通用,现在几乎所有编程语言都能读写它,成了前后端通信、接口返回数据的事实标准。
一句话概括:JSON 就是用文本描述「有什么数据、数据长什么样」,让两个程序之间能互相读懂。
一眼看懂 JSON
拿上图这个例子拆开看:最外层是一对花括号 {},里面是键值对;键和值用冒号隔开,多个键值对用逗号隔开。整个结构就三件事:花括号包对象、方括号包数组、双引号包字符串。
JSON 支持哪些数据类型
| 类型 | 写法 | 说明 |
|---|---|---|
| 对象 | {"name": "工具大全"} | 花括号包键值对,键必须是字符串 |
| 数组 | ["工具", "效率"] | 方括号包有序列表,元素可以是任意类型 |
| 字符串 | "免费" | 必须用英文双引号,不能是单引号 |
| 数字 | 12345 / 3.14 | 整数和小数都支持,不能加引号 |
| 布尔值 | true / false | 小写,注意不是 True |
| 空值 | null | 表示「没有值」,不是 0 也不是空字符串 |
对象和数组可以任意嵌套,所以 JSON 能表达从「一个用户」到「一整页列表」的任意复杂结构。
五条语法规则,背下来少踩坑
- 键必须用英文双引号:JS 对象写键时可以不带引号,JSON 不行——用英文双引号包住的键才合法,单引号和裸键都会报错;
- 不能有尾逗号:最后一个键值对后面加逗号是初学者最高频的错误,多写一个逗号整段 JSON 直接非法;
- 不能写注释:JSON 是纯数据,注释符号一律不允许,别把配置说明塞进来;
- 字符串要转义:字符串内部出现双引号或反斜杠时,要在前面加反斜杠转义,否则解析会提前结束报错;
- 编码建议 UTF-8:中文内容用 UTF-8 编码最稳妥,否则可能出现乱码。
为什么大家都用 JSON 而不是 XML
- 更轻:同样的数据,XML 要写一堆开始和结束标签,JSON 体积小、解析快;
- 更直观:键值对天然贴近人读,层级用缩进就能看清;
- 生态好:每种语言都有现成解析库,JavaScript 里一行 JSON.parse() 就能读。
什么时候需要格式化与校验
日常开发里 JSON 最常见的三种用途:接口返回数据、配置文件、日志输出。它们各有各的痛点:
- 接口返回:后端返回的 JSON 有时是压缩成一行的,肉眼很难定位字段,格式化后一目了然;
- 配置文件:多写一个逗号、少写一个引号,程序启动就报错,先校验再排错能省半小时;
- 日志与片段:复制出来的 JSON 来源不明,先校验语法再往代码里贴,避免把错误带进项目。
这些活儿交给本站的JSON格式化工具:粘贴进去,自动格式化并高亮,有语法错误会直接提示出错位置,还支持压缩成一行方便传输。
三个常见误区
- 误区一:JSON 就是 JavaScript 对象。JSON 是独立于语言的文本格式,只是长得像 JS 对象。Python、Java、Go 都能读写 JSON,区别只在于各语言解析库的写法。
- 误区二:JSON 里能写注释。不能。JSON 设计为纯数据格式,要注释请选 JSONC、JSON5 之类的扩展格式,或把说明写进字段名。
- 误区三:格式化会改变数据。格式化只是重新排版,值和结构一个字节都不会变;压缩和格式化可以来回转换,这就是「数据无损」的意义。
常见问题(FAQ)
JSON 报错说位置不对,怎么看?
先看最外层花括号是否成对,再查尾逗号和引号;本站 JSON 格式化工具会直接提示出错位置,比肉眼一行行找快得多。
数字在 JSON 里要加引号吗?
不加。加引号会变成字符串,比较大小、排序的结果完全不同——字符串数字和数字是两个东西。
JSON 和 YAML 怎么选?
JSON 无注释、严格、机器友好,适合接口和程序间交换;YAML 允许注释、更适合人写的配置文件。项目里用哪种,跟紧团队约定就好。
JSON 是开发者的「通用语言」:前端看得懂、后端写得出、数据库存得下。掌握它并不难——记牢那五条语法规则,再配合一个JSON格式化工具,基本就够用了。想继续补开发基础,可以接着读:Base64 是什么?一文看懂编码原理与在线转换,以及时间戳是什么?Unix 时间戳与日期转换入门。