一、JSON 是什么
如果你接触过任何一种现代 Web 开发,几乎一定见过下面这种东西:
{
"name": "张三",
"age": 28,
"isVip": true,
"hobbies": ["读书", "游泳", "写代码"],
"address": {
"city": "北京",
"zip": "100000"
}
}
这就是 JSON(JavaScript Object Notation,JavaScript 对象表示法)。简单说,它是一种用文本表示结构化数据的格式。无论是浏览器和服务器之间传数据,还是配置文件、日志、API 接口,JSON 几乎无处不在。
需要特别说明的一点是:虽然名字里带有 "JavaScript",但 JSON 只是一种数据格式,和编程语言无关。Python、Java、Go、PHP、Rust……几乎所有语言都内置了 JSON 的解析和生成工具。
二、JSON 的历史
JSON 的发明人是美国程序员 Douglas Crockford。2001 年前后,他在 State Software 公司工作时,为了让浏览器和服务器之间能轻量地交换数据,从 JavaScript 的字面量语法中抽取出了一套极简的数据格式,并给它起了名字:JSON。
2006 年,Crockford 发布了 RFC 4627,把 JSON 正式标准化。之后 JSON 迅速取代了当时流行的 XML,成为 Web 数据交换的事实标准。今天的 JSON 规范是 2017 年发布的 RFC 8259。
一个有意思的细节:Crockford 自己说,JSON 并不是他"发明"的,而是他"发现"的——因为 JavaScript 早就这么写对象了,他只是把其中可以跨语言使用的部分抽出来,规定了几条严格的规则。
三、JSON 的语法规则
JSON 的规则非常简单,核心就六种数据类型:
| 类型 | 写法示例 | 说明 |
| 字符串 | "hello" | 必须用双引号 |
| 数字 | 42, 3.14 | 整数或浮点数 |
| 布尔值 | true, false | 小写 |
| 空值 | null | 小写 |
| 数组 | [1, 2, 3] | 有序集合,用方括号 |
| 对象 | {"k": "v"} | 键值对集合,用花括号 |
几条容易踩坑的规则:
- 键名必须用双引号,不能用单引号,也不能不加引号。
- 字符串只能用双引号,单引号会报错。
- 不能有多余的逗号,比如
[1, 2, 3,]在 JSON 里是非法的。 - 不能写注释,
//和/* */都不行。 - 顶层只能是对象或数组,不能是单独的字符串或数字(虽然很多解析器宽松地允许了)。
四、为什么需要"格式化"
你可能会问:JSON 不就是一段文本吗,为什么还要专门做"格式化"工具?
原因在于实际开发中,JSON 经常以压缩形式传输,为了节省带宽,所有的换行和缩进都被去掉了。比如下面这段:
{"name":"张三","age":28,"address":{"city":"北京","zip":"100000"},"hobbies":["读书","游泳"]}
这种"一行流"对机器很友好,但人眼几乎没法读。一旦数据稍微复杂一点,排查问题就成了灾难。
JSON 格化式(Format / Beautify / Prettify) 做的事情就是:把这一整行重新加上换行和缩进,让它变成层次分明的样子:
{
"name": "张三",
"age": 28,
"address": {
"city": "北京",
"zip": "100000"
},
"hobbies": [
"读书",
"游泳"
]
}
反过来也有一个常见操作叫压缩(Minify),把所有空白去掉,用于上线前减小体积。
五、格式化的实际好处
| 好处 | 说明 |
| 可读性强 | 一眼看出嵌套层级,排查接口返回值特别方便 |
| 减少出错 | 漏逗号、多逗号、少括号的问题在格式化后会立刻暴露 |
| 便于 diff | 代码评审和版本控制里,格式化后的 diff 更清晰 |
| 便于学习 | 新手通过格式化后的 JSON 能更快理解数据结构 |
| 自动校验 | 大多数格式化工具会同时做语法校验,错误位置一目了然 |
举个真实场景:前端调用接口返回一段 JSON,里面某个字段少了逗号,导致整个解析失败。如果你直接看压缩版的原始字符串,可能瞪半小时都找不到问题;但只要往格式化工具里一贴,它立刻告诉你"第 12 行缺少逗号"。
六、JSON vs XML 对比
在 JSON 流行之前,XML 是数据交换的主流格式。下面是一段等价的数据,分别用 XML 和 JSON 表示。
XML 版本:
<person>
<name>张三</name>
<age>28</age>
<address>
<city>北京</city>
<zip>100000</zip>
</address>
<hobbies>
<hobby>读书</hobby>
<hobby>游泳</hobby>
</hobbies>
</person>
JSON 版本:
{
"name": "张三",
"age": 28,
"address": { "city": "北京", "zip": "100000" },
"hobbies": ["读书", "游泳"]
}
两者对比:
| 维度 | JSON | XML |
| 体积 | 小 | 大(标签重复) |
| 解析速度 | 快 | 慢 |
| 可读性 | 高 | 中 |
| 注释支持 | 不支持 | 支持 |
| 扩展性 | 一般 | 强(有 schema、命名空间) |
| 适用场景 | Web API、配置、日志 | 文档、企业级消息、SVG 配置 |
总体来说,JSON 在体积和解析速度上完胜 XML,所以 Web 数据交换几乎全部用 JSON。但在需要严格 schema 校验、文档结构复杂的场景(比如 Office 文档、SVG),XML 仍然占有一席之地。
七、实践推荐
理解了 JSON 是什么之后,日常开发中最常用的操作就是"格式化"和"压缩"。与其每次都自己手写脚本,不如直接用在线工具:
- JSON 格式化工具:https://52tool.net/tools/devtool/jsonFormat
把接口返回的压缩 JSON 粘进去,一键得到带缩进、带语法高亮、带错误提示的版本,排查问题效率立竿见影。支持格式化、压缩、转义、校验一条龙,是前后端联调时最常用的工具之一。