JavaScript Object Notation

轻量、通用、一看就懂的数据交换格式

替代 XML 的一种更简洁的数据载体。它就是一个有规则的字符串,却撑起了现代前后端交互的绝大部分流量。

键值对结构
跨语言支持
体积小 · 易解析
RFC 8259
01

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 简介
02

表现形式Structure

首先,它是一个字符串,一个有规则的字符串。然后它的表现形式是键值对的,非常类似 Java 语言里的 Map、 Objective-C 里的字典。

目前我们用到的键值对支持:String、Number、Array、Boolean、null,此外还可以嵌套对象。

对象 · Object

user.json
{
  "name": "小工具",
  "age": 26,
  "vip": true,
  "tags": ["php", "js"],
  "address": null
}

数组 · Array

list.json
[
  { "id": 1, "title": "第一条" },
  { "id": 2, "title": "第二条" },
  { "id": 3, "title": "第三条" }
]
03

优势Why JSON wins

它取代 XML 成为主流,并不是因为"更强大",而是因为"更省事"。

🪶

简洁、体积小

没有成对的闭合标签,同样的数据,JSON 往往只有 XML 的一半甚至更少的字符量。

⚡

上手容易,高效

语法只有对象、数组、字符串、数字、布尔和 null,几分钟就能学会,解析器也几乎零成本。

🌍

跨语言

移动端 Android、iOS 的项目构造,通常都是其他语言提供接口(JSON 方式),客户端读取接口开发。

04

与 XML 的比较JSON vs XML

JSON 写法

data.json
{
  "student": {
    "name": "张三",
    "age": 18,
    "class": "高三(2)班"
  }
}

XML 写法

data.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 不可比拟的优势。"
05

常用 JSON 库Libraries

JSON 常被用作序列化,Java 中常用的 JSON 解析方式如下:

官方JSON-javaorg.json,最原始的实现,小而全,适合简单场景。
GoogleGson对象与 JSON 互转,注解灵活,兼容性好,学习成本低。
AlibabaFastjson速度著称,API 简洁,注意版本安全与自动类型配置。
SpringJacksonSpring 生态默认选择,流式解析,性能与稳定兼顾。
06

在线工具:格式化 / 校验Formatter

粘贴一段 JSON,实时检查语法并美化缩进。全部在浏览器本地完成,不上传任何数据。