轻量、通用、一看就懂的数据交换格式
替代 XML 的一种更简洁的数据载体。它就是一个有规则的字符串,却撑起了现代前后端交互的绝大部分流量。
JSON 是什么?What is JSON
有一种叫做 JSON(JavaScript Object Notation)的轻量级数据交换格式,能够替代 XML 的工作。它就是 JSON。
数据格式比较简单,易于读写;格式都是压缩的,占用带宽小,易于解析。客户端 JavaScript 可以简单地通过
JSON.parse() 读取 JSON 数据,包括 ActionScript、C、C#、ColdFusion、Java、JavaScript、Perl、PHP、Python、Ruby
等语言的服务端也都能方便地解析。
各语言对 JSON 的支持都特别好。自从 Ajax 流行起来,JSON 格式的传输就更加流行了。
本质:一段文本。用途:交互。但它的边界不局限于 Web 项目的前后端交互——接口、配置文件、文件存储等等都可以用它。 —— 小工具 · JSON 简介
表现形式Structure
首先,它是一个字符串,一个有规则的字符串。然后它的表现形式是键值对的,非常类似 Java 语言里的 Map、 Objective-C 里的字典。
目前我们用到的键值对支持:String、Number、Array、Boolean、null,此外还可以嵌套对象。
对象 · Object
{
"name": "小工具",
"age": 26,
"vip": true,
"tags": ["php", "js"],
"address": null
}
数组 · Array
[
{ "id": 1, "title": "第一条" },
{ "id": 2, "title": "第二条" },
{ "id": 3, "title": "第三条" }
]
优势Why JSON wins
它取代 XML 成为主流,并不是因为"更强大",而是因为"更省事"。
简洁、体积小
没有成对的闭合标签,同样的数据,JSON 往往只有 XML 的一半甚至更少的字符量。
上手容易,高效
语法只有对象、数组、字符串、数字、布尔和 null,几分钟就能学会,解析器也几乎零成本。
跨语言
移动端 Android、iOS 的项目构造,通常都是其他语言提供接口(JSON 方式),客户端读取接口开发。
与 XML 的比较JSON vs XML
JSON 写法
{
"student": {
"name": "张三",
"age": 18,
"class": "高三(2)班"
}
}
XML 写法
<student>
<name>张三</name>
<age>18</age>
<class>高三(2)班</class>
</student>
| 对比项 | JSON | XML | 结论 |
|---|---|---|---|
| 可读性 | 层次清晰,符号略多 | 标签语义直观 | XML 稍好 |
| 可扩展性 | 可存 JS 复合对象,主场作战 | 天生扩展性好 | 各有优势 |
| 编码难度 | 手写几乎不会错 | 需要 DOM / SAX / STAX 等 | JSON 更简单 |
| 解码难度 | 一行 JSON.parse |
同编码,需专用解析器 | JSON 更简单 |
| 体积 / 带宽 | 压缩,无冗余闭合标签 | 标签成对,冗余较多 | JSON 更小 |
| 生态支持 | 各语言库齐全(Jackson / Gson / Fastjson …) | 成熟但偏重 | 平手 |
"XML 天生有很好的扩展性,JSON 当然也有,没有什么是 XML 能扩展、JSON 不能的。不过 JSON 在 JavaScript 主场作战, 可以存储 JavaScript 复合对象,有着 XML 不可比拟的优势。"
常用 JSON 库Libraries
JSON 常被用作序列化,Java 中常用的 JSON 解析方式如下:
在线工具:格式化 / 校验Formatter
粘贴一段 JSON,实时检查语法并美化缩进。全部在浏览器本地完成,不上传任何数据。