打开任何一个接口的返回值,大概率会看到一对花括号,里面整整齐齐排着 "name": "value"。这就是 JSON。

它的全称是 JavaScript Object Notation,字面意思是 JavaScript 对象表示法。名字里带 JavaScript,但它早就不是 JavaScript 专属的东西了。

它解决的其实是“怎么把数据传过去”

程序之间传数据,得先约定一种格式。早期大家用 XML,标签一层套一层,能表达复杂结构,但写起来啰嗦,解析也慢。

JSON 的思路更简单:数据只有两种组织方式——键值对和列表。

对象用花括号,里面是 "键": 值:

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

数组用方括号,里面是值或对象:

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

两种结构互相嵌套,就能描述绝大多数业务数据。省掉了闭合标签,体积小,人也能直接读。

它只有六种数据类型

字符串、数字、布尔值、null、对象、数组。

没有日期类型,日期通常写成字符串;没有二进制,文件一般转成 Base64;没有注释,也不能放函数。这些限制看起来是缺点,实际上换来了跨语言的一致性——任何语言的 JSON 库,对同一段文本的解析结果都一样。

为什么到处都是它

浏览器原生支持。JavaScript 里 JSON.parse() 一行就能把字符串变成对象,JSON.stringify() 反过来序列化。

几乎所有语言都有成熟的库:Python 的 json、Java 的 Jackson、Go 的 encoding/json。服务端返回、前端渲染、配置文件、日志埋点,全都能用同一套格式。

一个容易混淆的点

JSON 是“文本格式”,不是“对象”。

你在控制台看到的对象,是解析之后的结果。接口传输的、文件里存的,本质上都是字符串。这也是为什么有时候要 parse 两次——某一层把对象又序列化了一遍。

判断一段文本是不是合法 JSON,不用靠眼睛看。把它贴进 JSON 在线解析工具,能格式化、能报错定位,比逐个字符检查快得多。