JSON 的理解

327 阅读2分钟

这是我参与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");