Skip to content

JSON

1 什么是JSON

JSON 全称 JavaScript Object Notation,即 JavaScript 对象表示法

  • 它是一种轻量级的数据交换格式。
  • 设计初衷是让 人类可读,并且 机器易于解析和生成
  • 虽然起源于 JavaScript,但它已经成为跨语言的数据交换标准,几乎所有主流语言都支持 JSON。

简单的说,JSON 就是字符串,但是是遵循指定格式的字符串,主要用来在不同的系统之间做数据交互,例如在前端和后端、不同语言的程序之间(因为是文本,所以传输和处理简单)。

虽然是文本,但是因为遵循特定的格式,所以很容易被解析为对象,然后交由程序进行处理;当然在程序中,程序也很容易将对象转换为 JSON 字符串,然后发送给其他系统。

2 JSON 的基本语法

既然 JSON 是字符串,遵循指定的格式,下面就来介绍 JSON 的格式。

JSON 字符串有 2 种格式:对象格式数组格式

2.1 对象格式

对象格式:外部用 {} 括起来,其中是属性,属性采用 键值对key:value)的方式。

语法:

json
{
    key1: value1,
    key2: value2,
    ...
}
  • 换行符、空格是忽略的,加不加是一样的,所有内容可以写在一行,这里为了可读性,所以进行了格式化。

举个栗子:

以下是一个学生信息信息的 JSON 格式:

json
{
	"id": "001",
	"name": "zhangsan",
	"age": 18
}
  • 上面学生信息包含:idnameage
  • "001""zhangsan" 是字符串;age 是数字,不用 "" 括起来。

2.2 数组格式

数组格式:外部用 [] 括起来,内部是一个个元素,和数组一样。

语法:

json
[item, item, item, ...]

数组中的 item 可以是基本数据类型,也可以是对象类型。

举个栗子:

下面是一个数字列表:

json
[1, 2, 3, 4, 5]

下面是一个字符串列表:

json
["apple", "banana", "orange"]

下面是一个学生信息的列表

json
[{
		"id": "S001",
		"name": "zhangsan",
		"age": 18
	},
	{
		"id": "S002",
		"name": "lisi",
		"age": 19
	},
	{
		"id": "S003",
		"name": "wangwu",
		"age": 17
	}
]

同一个数组中的元素类型也可以是不同的,有的元素可以是数字,有的可以是字符串或对象。

2.3 格式嵌套

JSON 的对象格式与数组格式 都可以互相嵌套

也就是说:

  • 对象中的某个属性的值,可以是另一个对象或者数组;
  • 数组中某个元素,也可以是对象或数组。

这种嵌套是 JSON 表达复杂结构的关键能力,使得 JSON 能够描述任意层次的数据结构。


举个栗子:

下面这个 JSON 表示一个学生对象,其中包含:

  • 基本属性:idnameage
  • 一个嵌套的地址对象:address
  • 一个成绩列表数组:scores
  • 一个课程列表数组,其中每个课程又是一个对象:courses
json
{
	"id": "S001",
	"name": "zhangsan",
	"age": 18,

	"address": {
		"city": "Beijing",
		"district": "Haidian",
		"detail": "XX Road No.88"
	},

	"scores": [95, 88, 78],

	"courses": [
		{
			"name": "Math",
			"credit": 3
		},
		{
			"name": "English",
			"credit": 2
		}
	]
}

从上面的例子可以看出:

  • address 属性的值是一个 对象
  • scores 属性的值是一个 数组(元素是数字)
  • courses 属性的值也是一个 数组(元素是对象)

这就是 JSON 格式的嵌套,如果需要你可以一直嵌套,所以可以使 JSON 可以用于表达真实世界中各种复杂的数据关系。