JSON
JSON——一种数据格式
语法
简单值——使用与JavaScript相同的语法,可以在JSON中表示string、number、boolean、null
"Hello world!"
对象——对象作为一种复杂数据类型,表示一组无序的键值对儿
{
"name":"Nicholas",
"age":29,
"job":"engineer software",
"school":{
"name":"Merrimack Collage",
"location":"North Andover, MA"
}
}
数组——数组作为一种复杂数据类型,表示一组有序的值的列表
{
{
"title":"Professional JavaScript",
"author":"Nicholas C .Zake",
"editon":3,
"year":2011
},
{
"title":"Professional JavaScript",
"author":"Nicholas C .Zake",
"editon":2,
"year":2009
},
{
"title":"Professional JavaScript",
"author":"Nicholas C .Zake",
"editon":2,
"year":2008
},
{
"title":"Professional JavaScript",
"author":"Nicholas C .Zake",
"editon":1,
"year":2005
}
}
JSON——不支持变量、函数或对象实例,是一种表示结构化数据的格式
解析与序列化
将JavaScript对象序列化为JSON字符串——stringify()
var book={
"name":"Nicholas",
"age":29,
"job":"engineer software",
"school":{
"name":"Merrimack Collage",
"location":"North Andover, MA"
}
};
var jsonText=JSON.stringify(book);
将JSON字符串解析为原生JavaScript值——parse() || eval()
{ "name":"Nicholas", "age":29, "job":"engineer software", "school":{ "name":"Merrimack Collage", "location":"North Andover, MA" } } var bookCopy=JSON.parse(jsonText);
序列化选项
var book={
"name":"Nicholas",
"age":29,
"job":"engineer software",
"school":{
"name":"Merrimack Collage",
"location":"North Andover, MA"
}
};
var jsonText=JSON.stringify(book,[“name”,”age”]);
第二个参数是个过滤器,可以是一个数组,也可以是一个函数
数组——JSON.stringify()的结果将只包含数组中列出的属性
函数——根据键名可以知道如何处理序列化对象中的属性
var jsonText=JSON.stringify(book,function(key,value){
switch(key){
case "authors":
return value.join(",");
case "ayear":
return 5000;
case "editon":
return undefined;
default:
return value;
}
});
第三个参数是一个选项——表示是否在JSON字符串中保留 缩进
var jsonText=JSON.stringify(book,[“name”,”age”],--);
返回对象自身的JSON数据格式——toJSON()方法
var book={
"name":"Nicholas",
"age":29,
"job":"engineer software",
"school":{
"name":"Merrimack Collage",
"location":"North Andover, MA"
},
toJSON:function(){
return this.title;
}
};
var jsonText=JSON.stringify(book);
解析选项
第二个参数是一个函数(还原函数),将在每 键值对儿上调用
var book={
"name":"Nicholas",
"age":29,
"job":"engineer software",
"school":{
"name":"Merrimack Collage",
"location":"North Andover, MA"
},
"releaseDate":new Date(2011,11,1)
};
var jsonText=JSON.stringify(book);
var bookCopy=JSON.parse(jsonText,function(key,value){
if(key=="realeaseDate"){
return new Date(value);
}else{
return value;
}
});
alert(bookCopy.releaseDate.getFullYear());