JSON结构

课后整理 2020-12-20

JSON结构可以由下面三种类型的数据组成。

JSON可以由无数个对象、数组嵌套组合而成,构成一个复杂的数据结构。

【提示】

JSON仅是一种表示结构化数据的格式,不支持变量、函数或类型实例,与JavaScript数据语法相同,但仅是JavaScript的一个子集。

最简单的JSON数据形式就是单个值。例如,下面这个值就是有效的JSON数据。

1

这是JSON表示数值1的方式。类似的,下面是JSON表示字符串的方式。

"Hello,World"

JavaScript字符串与JSON字符串最大区别:JSON字符串必须使用双引号,不能够使用单引号,因为单引号易导致语法错误。

布尔值和null也是有效的JSON形式。但是,在实际应用中,JSON更多地用来表示更复杂的数据结构,而简单的值只是整个数据结构中的一部分。

对于特殊字符可以使用转义序列来表示。

数值可以是整数、浮点数,也可以使用科学计数法来表示。数值可以直接引用,不需要添加引号。

逻辑值仅包括true或false,直接使用,不需要添加引号。

在JSON数据中,分隔符(如空格、制表符和换行符)是不被解析的,因此可以在数据结构内任意位置增加空白,以实现对数据的格式化排版。

对象

对象是无序的键/值对集合。基本构成规则:以左大括号({}开始,以右括号())结束,每个键与值对之间使用冒号(:)进行分隔,键/值对之间使用逗号(,)分隔。

【示例1】在下面这段JSON数据中,string为元素的名称,value为元素的值,中间使用冒号分隔。

{"string1":"value1","  string 2":" value 2"," string 3":" value 3",….. " string n":"  value n"}

【提示】

JSON对象与JavaScript对象直接量稍微有一些不同。下面是一个JavaScript中的对象直接量。

var  book = {
    name : "w3c",
    date : "2017"
};

这是在JavaScript中创建对象直接量的标准方式。但JSON中,对象要求给属性名加引号,如下所示。

{
    "name" : "w3c",
    "date" : "2017"
}

与JavaScript的对象直接量相比,JSON对象没有声明变量,因为在JSON中没有变量的概念。另外,没有末尾的分号,因为这不是JavaScript语句,所以不需要分号。

注意,JSON对象的属性必须加双引号,这在JSON中是必需的。属性的值可以是简单值,也可以是复杂类型值,因此可以像下面这样在对象中嵌人对象。

{
    "name" : "w3c",
    "book" : {
        "name" : [{"lang" :  "cn"},"XPath语言基础"]
    }
}

上面例子在顶级对象中嵌入了"book"信息。虽然有两个"name"属性,但由于它们分别属于不同的对象,因此这样完全没有问题。不过,同一个对象中绝对不应该出现两个同名属性。

数组

数组是有序值的集合。基本构成规则:以左中括号([)开始,以右中括号(])结束。值之间使用逗号(,)分隔。

【示例2】下面是一段JSON数据,使用数组定义。

["value1","  value 2"," value 3",….. " value n"]

在这个有序列表中,前后值的顺序是不能够调换的,这与大部分语言中数组功能相一致,第一个值的索引序号为0,第二个值的索引序号为1。

JSON数组采用的是JavaScript中的数组直接量形式。例如,下面是JavaScript中的数组直接量。

var  values = [1, true, "true"];

在JSON中,可以采用同样的语法表示同一个数组:

[1,  true, "true"]

注意,JSON数组也没有变量和分号。把数组和对象结合起来,可以构成更复杂的数据集合。