JSON(JavaScript Object Notation,JavaScript对象表示法)是一种数据格式,与XML相比更加简便,而且不用创建DOM对象。
JSON有三种类型的值:
简单值:可以表示字符串,数字,布尔和null。但是没有undefined 。比如 5 和 “hello world”都是简单值。
对象:
JavaScript中的对象表示:
var person = {
name: "kong" ;
age: 23 ;
};
在JSON中:
{
"name" : "kong" ,
"age" : 23
}
两者相比JSON中没有变量的概念。其次没有末尾的分号。而且对象的属性值必须加引号!而且应该是双引号。
数组:
JavaScript中的数组:
var values = ["hi",true,25] ;
在JSON中:
["hi",25,true]
与XML需要解析成DOM的繁琐相比,JSON在解析为JavaScript对象后,可以直接通过 . 的方式获得数据。
stringify()是把JavaScript对象序列化为JSON对象的方法。
var book = {
title : "profeddional javscript" ,
authors: ["kong"],
edition:3 ,
year: 2011
} ;
var jsontext = JSON.stringify(book) ;
会得到一个JSON字符串,保存到jsontext中。默认情况下不包括空格和缩进。jsontext如下:
{"title" : "profeddional javscript" ,"authors": ["kong"], "edition":3 ,"year": 2011}
stringify()还可以接受另外两个参数。第二个参可以过滤转化为JSON的属性:
var book = {
title : "profeddional javscript" ,
authors: ["kong"],
edition:3 ,
year: 2011
} ;
var jsontext = JSON.stringify(book,["titile","edition"]) ;//转化的JSON字符串中只包括title属性和edition属性。
第二个参数也可以是函数。
var book = {
title : "profeddional javscript" ,
authors: ["kong"],
edition:3 ,
year: 2011
} ;
var jsontext = JSON.stringify(book,function(key,value){switch(key){
case "authors": return value.join(",") ;
case "year": return 5000 ;
case "edition": return undefined ;
default: return value ;
}
}) ;
jsontext结果:{"title":"profeddional javscript","authors":"kong","year":5000}
第三个参数为控制缩进和换行。如果这个参数为一个数字,那么他表示每个级别缩进的空格数。
var jsontext = JSON.stringify(book,function(key,value){
switch(key){
case "authors": return value.join(",") ;
case "year": return 5000 ;
case "edition": return undefined ;
default: return value ;
}
},4) ;
这样JSON字符串就有缩进了。第三个参数也可以是字符串,这样会有这样一个字符串来代替空格。
var jsontext = JSON.stringify(book,function(key,value){
switch(key){
case "authors": return value.join(",") ;
case "year": return 5000 ;
case "edition": return undefined ;
default: return value ;
}
},“- -”) ;
还有一个toJSON()的方法。比如:
var book = {
title : "profeddional javscript",
authors: ["kong"],
edition: 3 ,
year: 2011 ,
toJSON: function(){return this.title ;}
};
var jsontext = JSON.stringify(book) ;
alert(jsontext) ;
结果:"profeddional javscript"
JSON.parse()方法是把JSON的序列转化成JavaScript对象。也就是stringify的逆向。
var bookCopy = JSON.parse(jsontext) ;