JSON数据格式详解

来源:互联网 发布:战舰世界神风r数据 编辑:程序博客网 时间:2024/06/10 10:03

一、写在前面的话

曾几何时,XML作为互联网上传输结构化数据的事实标准而风光无限。Web服务的第一次浪潮很大程度上都是建立在XML之上的,突出的特点是服务器与服务器通信。但业界一直不乏质疑XML的声音,不少人认为XML过于繁琐、冗长。为解决这个问题,也涌现了一些方案。不过,Web的发展方向已经改变了。

JSON(JavaScript Object Notation,JavaScript对象表示法)的应用早在2001年就开始了,JSON是JavaScript中一个严格的子集,利用了JavaScript中一些模式来表示结构化数据。与XML相比,JSON是在JavaScript中读写结构化数据的更好的方式。

关于JSON,最重要的是理解它是一种数据格式,不是一种编程语言。虽然具有相同的语法形式,但JSON并不从属于JavaScript。而且,并不是只有JavaScript才使用JSON,毕竟JSON只是一种数据格式。很多编程语言都有针对JSON的解析器和序列化器。

二、语法

JSON的语法可以表示以下三种类型的值。

1、简单值

使用与JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和null。但JSON不支持特殊值undefined。

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

5

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

“Hello World!”

JavaScript字符串与JSON字符串的最大区别在于,JSON字符串必须使用双引号(单引号回导致语法错误)。

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

2、对象

一种复杂的数据类型,表示一组无序的键值对。每个键值对中的值可以是简单值,也可以是复杂数据类型的值。

JSON中的对象跟JavaScript字面量稍微有些不同。

下面是一个JavaScript中的对象字面量:

var person = {name:"Nicholas",age:29};

这虽然是开发人员在JavaScript中创建对象字面量的标准方式,但JSON中的对象要求给属性家引号。实际上,在JavaScript中,前面的对象字面量完全可以写成下面这样:

var object= {"name":"Nicholas","age":29};

JSON表示上述对象的方式如下:

{"name":"Nicholas","age":28}

【注意】JSON对象有两处不同:(1)没有声明变量(JSON中没有变量的概念)。(2)没有末尾的分号(因为这不是JavaScript语句,所以不需要分号)。

【提示】JSON中对象的属性必须加双引号。

另外,属性的值可以是简单值,也可以是复杂数据类型,因此可以像下面这样在对象中嵌入对象:

{"name":"Nicholas","age":28,"school":{"name":"Merrimack College","location":"North Andover,MA"}}

虽然有两个“name”属性,但由于它们分属于不同的对象,因此这样绝对没有问题。不过,同一个对象中绝对不应该出现两个同名属性。


3、数组

一种复杂的数据类型,表示一组有序的值得列表,可以通过数组索引来访问其中的值。数组的值也可以是任意类型——简单值、对象或数组。

JSON数组采用的就是JavaScript中数组字面量的形式。例如,下面是JavaScript中的数组字面量:

var values = [25,"hi",true];

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

[25,"hi",true]

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

[{"title":"aaaaa","authors":["Writer A"],"edition":1,"year":2007},{"title":"bbbbb","authors":["Writer B"],"edition":2,"year":2006},{"title":"ccccc","authors":["Writer C"],"edition":3,"year":2008},{"title":"ddddd","authors":["Writer D","Writer C","Writer B"],"edition":4,"year":1996}]

这个数组中包含一些表示图书的对象。每个对象都有几个属性,其中一个属性是“authors”,这个属性的值又是一个数组。对象和数组通常是JSON数据结构的最外层形式(当然,这不是强制规定的),利用它们能够创造出各种各样的数据结构。

原创粉丝点击