Json是一种轻量级的数据格式,使用了JavaScript语法的子集表示简单值(数字、字符串、布尔值)、null、对象(表示一组键值对)和数组,不支持变量、函数、对象实例。可将Json数据结构解析为JavaScript对象(而XML数据结构需要解析为DOM文档更麻烦)。也可将JavaScript对象转换为可随请求发送的数据(字符串,Ajax适合将纯文本内容发送给服务器)。即可方便地使对象和字符串自由转换。
Json中对象没有名字,仅用{}将属性包括进来,并且属性名必须用双引号。数据定义结束后没有分号,Json不是JavaScript语句。
ECMAScript定义了一个全局的JSON对象,该对象有两个方法:
stringify()
将json对象或JS对象序列化为JSON格式的字符串
var books=[
{
title:"gone with the wind",
authors:["mike","lily"],
edition:3,
year:2011
},
{
title:"six god",
authors:["anna","lucy"],
edition:4,
year:2011
},
{
title:"prada",
authors:["lilei","tom"],
edition:3,
year:2011
}
]
//参数function中定义了对每个传入对象的键值应该做什么处理
var jsonbook = JSON.stringify(books,function(key,value){
switch(key){
case "authors":
return value.push("anna");//返回键值
case "year":
return 2000;
case "edition":
return undefined;//删除某个键
default:
return value;
}
},4);
如果stringify()不能满足序列化的要求,可以对象内部定义toJSON方法作为函数过滤器的补充,然后仍是通过调用stringify来序列化,此时的顺序为:
(1) 如果存在toJSON方法且通过它能取得有效值,则调用该方法,否则返回对象本身
(2)如果提供了第二个参数,应用这个函数过滤器,传入函数的值应该是(1)中的返回值。
(3)对(2)中返回的每个值进行序列化
(4)如果提供了第三个参数则执行相应的格式化
var book={
title:"gone with the wind",
authors:["mike","lily"],
edition:3,
year:2011,
releaseDate:new Date(2011,11,1),
toJSON:function(){
return this.title;
}
}
var jsonbook = JSON.stringify(book);
alert(jsonbook);
parse()
将json字符串解析为原生的JavaScript值,即一个json对象。
var strJson='[{"name":anna,"age":12,"gender":"famale"},{"name":mike,"age":12,"gender":"male"},{"name":lily,"age":20,"gender":"famale"}]'; //注意单引号要写在外面,属性值用上引号,且不要有换行空格等
//参数function将在每个键值对上调用
var booksCopy = JSON.parse(jsonbook,function(key,value){
if(key=="releaseDate"){
return new Date(value);//返回一个Date对象作为键值
}else{
return value;
}
});
alert(booksCopy[0].releaseDate.getFullYear());