JSON 基础知识
你是否曾经疑惑过,当我们提到 JSON 的时候,我们在说什么?JSON 以 JS 开头,那么其与 JavaScript 的联系到底是什么?在这篇文章中,我们将尽可能通俗地了解 JSON 的起源、格式和意义,并解答一些常见的疑惑。
标准 JSON 格式中不可以使用任何形式的注释。
本文仅为了解释方便,使用了注释。在实际使用中请删除所有注释。
一、JSON 是什么
JSON (JavaScript Object Notation,读作 Jason) 是一种轻量级的数据交换格式,是基于 JavaScript 的一个子集。易于人阅读和编写,同时也易于机器解析和生成。这些特性使其成为理想的数据交换语言 [1]。
Crockford 率先设计并普及了 JSON。源自当年对不依赖 Flash & Java Applet 的实时 Server-to-Browser 通信协议的需求 [2]。
二、JSON 的格式
1. 基本结构
JSON 由三种元素组成 [1],包括:
- Object: 记录无序的映射关系,在
Python中称为字典(dict),在一些语言中被称为映射(map) - Array: 记录有序的数据集合,在
Python中称呼为列表(list) - Value:如其名,记录各种类型的数据,具体类型稍后解释
这些结构都是 language-independent 的,被大部分现代计算机语言以各种形式支持。这使跨编程语言,进行数据交换成为一种可能 [1]。
接下来将分别解释上面的概念。
2. JSON 语法
JSON Text 是数据经过序列化后的 JSON 字符串。可以是 Object, Array 和 Value [3]。
但是因为 Value 囊括了 Object & Array。所以一个非常简洁明了的等式是:
1 | |
3. Value
其中 Value 是一个比较特别的元素,包括了不同的类型 [1],包括:
- Object & Array:嵌套的
Object和Array - String:被引号
""包住的字符串 - Number:数字,包括
fixed和float - Boolean:布尔值,
true或false - Null:空值,在
Python中对应None
Value 是一个基本概念,任何作为 Object, Array, String, Number, Boolean, Null 的数据都算作是 Value。
可以理解为只要是 Value 的地方实际上可以是上述任一类型的数据。(包括 JSON Text 的根元素)[1] [3]
如果你略懂一点 Python 的 type hints,那么我想用 Union 来解释 Value 会更加直观:
1 | |
4. Object
Object 是 JSON 非常重要的一个组成部分甚至不少人认为 JSON 必须以 {} 作为最外层元素(尽管这并不正确 [3])。
Object 内含有数对 key-value 的映射关系,其形态如下:
1 | |
在这里 key 必须是一个 String,value 的类型则为 Value。
key 和 value 之间用 : 分隔,key-value 之间用 , 分隔。外面则用 {} 包裹 [1]。
前面提到过,Object 也是 Value 的一种 [1],所以 Object 也可以作为 Value 的一部分。看下面这个例子:
1 | |
5. Array
Array 是 JSON 中的另一个重要元素,其形态如下:
1 | |
和上面一样,这里的 value 也是 Value 类型的数据。value 之间用 , 分隔,外面则用 [] 包裹。[1]
同样,这里我们展示一下 Object 和 Array 作为 Value 的一个例子:
1 | |
6. String
String 是 JSON 中的一个基本数据类型,其形态如下:
1 | |
String 是由 " 包裹的字符序列。String 也是 Value 的一种。[1]
7. Number
Number 也是 JSON 中的一个基本数据类型,其形态如下:
1 | |
这里的 Number 包括了整数和浮点数。Number 也是 Value 的一种。[1]
8. Boolean
Boolean,布尔值,作为基本类型的它只存在两个不同的数据:
1 | |
Boolean 也是 Value 的一种。[1]
9. Null
Null,空值,比 Boolean 还过分,只有一个数据:
1 | |
Null 也是 Value 的一种。[1]
三、示例
1 | |
四、JSON 的意义
JSON 作为一种数据交换格式,其最大的意义在于其跨语言的特性。JSON 可以被大部分现代编程语言解析,这使得 JSON 成为了一种非常之理想的数据交换格式 [1]。
同时,随着前后端分离概念的出现,越来越多网站使用 JSON 格式在前后端之间交换数据。无论是进行 Web 开发,还是反过来进行数据抓取(爬虫),JSON 都是值得掌握的一种数据格式。
在不久后的 TeensCamp3 中,我们将会涉及到使用 JSON 来存储数据的项目。因此提前了解 JSON 的基本知识是非常有必要的。