JSON笔记

什么是 JSON

JSON 的全称是 JavaScript Object Notation (JavaScript对象表示法)。它是一种独立于编程语言、轻量级的数据交换格式(类似于XML等)。

JSON 是基于 JavaScript 对象字面量的,是 JavaScript 的一个子集。详细方面可以参考 http://www.json.org/


为什么使用JSON

JSON 被认为是 XML 的很好替代者。因为 JSON 的可读性非常好,而且它没有像 XML 那样包含很多冗余的元素标签,这使得应用在使用JSON进行网络传输以及进行解析处理的速度更快,效率更高。


JSON 语法格式

1
2
3
4
{
"name": "xiaoming",
"age": 20,
}
  • JSON 以名称 - 值对(又称键 - 值)的方式存储数据。
  • JSON 中使用冒号(:)分隔名称和值。名称始终在左侧,值始终在右侧。
  • 名称必须以双引号(”)括起,不能够使用单引号,亦或者不用。
从机器读取 JSON 的角度来解析 JSON 语法结构:
  • { (左花括号)指”开始读取对象“
  • } (右花括号)值“结束读取对象”
  • [ (左方括号)指“开始读取数组”
  • ] (右方括号)指”结束读取数组“
  • : (冒号)指“在名称 - 值对中分隔名称和值”
  • , (逗号)指“分隔对象中名称 - 值”或者“分隔数组中的值”

JSON 数据类型

  • 对象数据类型

JSON 本身就是对象,也就是一个被花括号包裹的名称 - 值对的列表。在 JSON 内部表示对象的方式,就如同与表示 JSON。下面 JSON 数据中包含一个 person 对象(person对象中还包含一个 hair 对象)

1
2
3
4
5
6
7
8
9
10
11
{
"person": {
"name": "xiaoming",
"age": 20,
"hair": {
"color": "light blond",
"length": "short"
},
"eyes": "green"
}
}
  • 字符串类型

JSON的值以字符串的形式表示,如同{ "animal": "cat"}中的"cat"JSON 中的字符串可以由任何 UniCode 字符构成。字符串的两边必须被双引号包裹。

在 JSON 的值中,一对双引号代表字符串中起点与终点。如果我们在双引号内部再次使用双引号,JSON编译器就无法识别双引号后面的内容(如下 “Hello 后面的内容),就会出现报错。错误用法如下所示:

1
2
3
{
"description": "Say "Hello" to everyone."
}

一般来说,字符串中如果需要使用特殊符号(例如双引号),则必须使用转义符号来表示(\)。正确用法如下所示:

1
2
3
{
"description": "Say \"Hello\" to everyone."
}
  • 数字类型

数字是一种常见的用于传递数据的信息片段。JSON 中的数字可以是整数、浮点数(双精度)、负数或者是指数。

1
2
3
4
5
6
7
{
"widgetInventory": 289,
"sadSavingAccount": 22.59,
"seattleLatitude": 47.606209,
"seattleLongtitude": -122.332071,
"earthMass": 5.97219e+24
}
  • 布尔值类型
1
2
3
4
{
"toastWithBreakfast": false,
"breadWithLunch": true
}
  • null 类型

null 是一个表示“没有值”的特殊值。它表示名称对应的值为空。

1
2
3
4
{
"shoes": "slippers",
"watch": null
}
  • 数组类型

数组类型表示,可以在形如列表的内部存储若干数组。

1
2
3
4
5
6
7
{
"eggCarton": [
"egg",
"egg",
null
]
}

特别需要注意的是,在 JSON 的数组内部,只存在值,而不存在数据类型等这样的说法。换句话说,就是在数组内部,可以存储任何合法的 JSON 数据类型(字符串、数字、对象、布尔值等)。

1
2
3
4
5
6
7
{
"eggCarton": [
"egg",
5,
null
]
}

在 Web开发中需要注意的地方

  • 在 HTTP 请求当中传递 JSON 时,需要设置媒体类型为 application/json


参考资料:

[1] https://book.douban.com/subject/26789960/