这是我参与8月更文挑战的第28天,活动详情查看:8月更文挑战
前言
吃饱饭才有力气写代码~
今天来理解一下JSON(JavaScript Object Notation),它是JavaScript的严格子集,利用JavaScript中的几种模式来表示数据结构化数据,理解JSON最关键的一点是要把他当成一种数据格式,而不是编程语言。它不属于JavaScript,只是拥有相同的语法而已,而且它也不是只能在JavaScript中使用,它是一种通用数据格式,很多语言都有解析和序列化JSON的内置能力。
语法
JSON语法支持三种类型:
- 简单值 字符串,数值,布尔值和null可以在JSON中出现,但是undefined不可以;
- 对象 第一种复杂数据类型,表示有序键值对,每个值可以是简单值,也可以是复杂类型;
- 数组
第二种复杂数据类型,它可以通过数值索引访问的值的有序队列,它的值可以是任意类型,包括简单值,对象甚至其他数组
JSON没有变量,函数或者对象实例的概念,JSON所有的记号都只是为表示结构化数据,虽然它借用了JavaScript的语法,但是要注意不能和JavaScript语言混淆。
简单值
例如:
6 //这个JSON表示数值5
"Hello World!" //这个表示JSON字符串(这个JSON字符串必须使用双引号,单引号会造成语法错误)
布尔值和null本身也是有效的JSON值,不过实际使用中一般都是使用复杂的数据结构,其中用到简单值。
对象
如:
// JavaScript 中的对象字面量
let person = {
name = "Tom",
age = 29
};
// JavaScript 中的对象
{
"name" = "Tom",
"age" = 29
}
JSON 对象与JavaScript 对象的两点不同:
- 没有变量声明
- 最后没有分号(因为不是JavaScript语句)
注意:
JSON中的对象属性名必须始终带双引号,手动编写JSON时漏掉这些双引号或者写成单引号是很常见的错误。
数组
// JavaScript 中的对象字面量
let arr = [25,'hi',true];
// JSON 数组
[25,'hi',true]
// JSON 可以和对象组合使用
[
{
"name" = "Spring",
"author" = "zhangsan"
},
{
"name" = "Summer",
"author" = "lisi"
}
]
解析
JSON 的迅速流行很大程度上是因为它可以直接被解析成可用的的JavaScript对象,在上面的例子中
book[1].name//就可以获取第二本书的名字
相比之下,遍历DOM结构就显得很复杂
doc.getElementsByTagName("book")[1].getAttribute("name");