最近项目中采用json数组进行前后端数据传输,前端不可避免的要涉及到对json数组的处理。于是总结了一下。
JSON对象有两个方法:stringify()和parse();前者把JavaScript对象序列化为JSON字符串,后者把JSON字符串解析为原生JavaScript值。
var jsonText=JSON.stringify(book);
var bookCopy=JSON.parse(jsonText);
序列化stringify()可以接受除需要序列化的JavaScript对象外额外两个参数。
- 第二个参数(数组or函数)
(1). 数组
var jsonText=JSON.stringify(book,["title","edition"]);
第二个参数是一个数组,起过滤作用,因此返回结果中只包含这两个属性,["title":" ","edition":" "]。
var jsonText=JSON.stringify(book,function(key,value){
switch(key){
case "year":
return 5000;
case "edition":
return undefined;
default:
return value;
}
});
(2). 函数
第二个参数是一个函数,函数返回的值就是对应键的值。但如果返回的是undefined,那么相应属性会被忽略。
- 第三个参数(数值or字符)
(1). 数值
var jsonText=JSON.stringify(book,null,4);
数值代表每个级别缩进的空格数,最大值为10,大于10时自动转换为10。
(2). 字符
var jsonText=JSON.stringify(book,null,"- -");
该字符串将在json字符串中用作缩进字符。长度不能超过10个字符长,超出时取前10个字符长。
toJSON()方法可以为任何对象添加toJSON方法。如:
var book={
"title":"aaaa",
"year":1111,
toJSON:function(){
return this.title;
}
}
对象序列化时先通过toJSON方法获取有效值。否则返回对象本身。
JSON.parse()可以接受除需要序列化的JavaScript对象外额外一个参数。
如:
var book={
"title":"aaaa",
"year":1111,
releaseDate:new Date(2011,11,1)
};
var jsonText=JSON.stringify(book);
var bookCopy=JSON.parse(jsonText,function(key,value)){
if(key=="releaseDate"){
return new Date(value);
}else{
return value;
}
}
参考:JavaScript高级程序设计