@H_404_0@JSON是JavaScript Object Notation的缩写,它是一种数据交换格式。
@H_404_0@在JSON出现之前,大家一直用XML来传递数据。因为XML是一种纯文本格式,所以它适合在网络上交换数据。XML本身不算复杂,但是,加上DTD、XSD、XPath、XSLT等一大堆复杂的规范以后,任何正常的软件开发人员碰到XML都会感觉头大了,最后大家发现,即使你努力钻研几个月,也未必搞得清楚XML的规范。 @H_404_0@终于,在2002年的一天,道格拉斯·克罗克福特(Douglas Crockford)同学为了拯救深陷水深火热同时又被某几个巨型软件企业长期愚弄的软件工程师,发明了JSON这种超轻量级的数据交换格式。 @H_404_0@道格拉斯同学长期担任雅虎的高级架构师,自然钟情于JavaScript。他设计的JSON实际上是JavaScript的一个子集。在JSON中,一共就这么几种数据类型:- number:和JavaScript的
number
完全一致; - boolean:就是JavaScript的
true
或false
; - string:就是JavaScript的
string
; - null:就是JavaScript的
null
; - array:就是JavaScript的
Array
表示方式——[]
; - object:就是JavaScript的
{ ... }
表示方式。
""
,Object的键也必须用双引号""
。
@H_404_0@由于JSON非常简单,很快就风靡Web世界,并且成为ECMA标准。几乎所有编程语言都有解析JSON的库,而在JavaScript中,我们可以直接使用JSON,因为JavaScript内置了JSON的解析。
@H_404_0@把任何JavaScript对象变成JSON,就是把这个对象序列化成一个JSON格式的字符串,这样才能够通过网络传递给其他计算机。
@H_404_0@如果我们收到一个JSON格式的字符串,只需要把它反序列化成一个JavaScript对象,就可以在JavaScript中直接使用这个对象了。
@H_404_0@序列化
@H_404_0@让我们先把小明这个对象序列化成JSON格式的字符串:JSON.stringify(xiaoming); // '{"name":"小明","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":"\"W3C\" Middle School","skills":["JavaScript","Java","Python","Lisp"]}'
@H_404_0@要输出得好看一些,可以加上参数,按缩进输出:
JSON.stringify(xiaoming,convert,' ');
@H_404_0@上面的代码把所有属性值都变成大写:
xiaoming
定义一个toJSON()
的方法,直接返回JSON应该序列化的数据:
输出name和age,并且改变了key:
'Name': this.name,'Age': this.age
};
}
};
@H_404_0@JSON.stringify(xiaoming); // '{"Name":"小明","Age":14}'
反序列化
@H_404_0@拿到一个JSON格式的字符串,我们直接用JSON.parse()
把它变成一个JavaScript对象:
JSON.parse()
还可以接收一个函数,用来转换解析出的属性: