JSON是一种数据格式,不是一种编程语言。不支持变量、函数或对象实例。它就是一种表示结构化数据的格式。
JSON的语法可以表示以下三种类型的值。
简单值:字符串、数值、布尔值、和null。不支持undefined
对象:对象作为一种复杂的数据类型,表示的是一组无序的键值对,每个键值对可以是简单值,也可以是复杂的数据类型的值。
{
“name”:“Nicholas”,
“age”:29,
“school”:{
“name”:“Merrimack College”,
“location”:“North Andover,MA”
}
}
数组:数组也是一种复杂的数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值,数组的值也可以是任意数据类型---简单值、对象或数组。
[
{
"title":"Professional Javascript",
"authours":[
"Nicholas C.Zakas"
]
"edition":2,
"year":2011
},
{
"title":"Professional Javascript",
"authours":[
"Nicholas C.Zakas"
]
"edition":2,
"year":2011
}
]
JSON对象有两个方法:stringify()和parse();
stringify():把一个Javascript对象序列化为一个JSON字符串。
var book={
title:"Professional JavaScript",
edition:3,
year:2011
};
var jsonText =JSON.stringify(book);
JSON.stringify除了要序列化的Javascript对象外,还可以接受两个参数,这两个参数用于指定以不同的方式序列化Javascript对象,第一个参数是过滤器,可以是一个数组,也可以是一个函数;第二个参数是一个选项,表示是否在JSON字符串中保留缩进。单独或组合使用这两个参数,可以更深入地控制JSON的序列化。
例如:
第二个参数是数组情况:var book={
title:"Professional JavaScript",
authors:[
"Nicholas C. Zakas"
],
edition:3,
year:2011
};
var jsonText=JSON.stringify(book,["title","edition"]);
JSOn.stringify()的第二个参数是一个数组,其中包含两个字符串:“title”和“edition”。这两个属性与将要序列化的对象中的属性是对应的,因此在返回的字符串中,就只会包含这两个属性:{“title”:"Professional JavaScript","edition":3}
第二个参数是函数情况:传入的函数接受两个参数,属性名和属性值。如果函数返回了undefined,那么相应的属性会被忽略。函数过滤器根据传入的键来决定结果。
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;
}
});
{“title”:"Professional JavaScript","author":"Nicholas C. Zakas","year":5000}
第三个参数用于控制结果中的缩进和空白符。如果这个参数是一个数值,那它表示的是每个级别的缩进的空格数。
var jsonText = JSON.stringify(book,null,4);
如果所进的是一个字符串而非数值,则这个字符串将在JSON字符串中被用作缩进符(不再使用空格)
var jsonText = JSON.stringify(book,null,"--");
toJSON()方法可以作为函数过滤器的补充。
JSON.parse();
把JSON字符串直接传给JSON.parse()就可以得到相应的JavaScript值。
例如:var bookCopy = JSON.parse(jasonText);
JSON.parse()也可以接受另一个参数,该参数是一个函数,将在每个键值对上调用。
例如:var bookCopy = JSON.parse(jsonText, function(key,value){
if(key=="releaseDate"){
return new Date(value);
}else{
return value;
}
})
JSON 是一个轻量级的数据格式,可以简单化表示复杂数据结构的工作量。JSON使用JavaScript语法的子集表示对象、数组、字符串、数值、布尔值和null。