(1)注意:实际上,第一次调用的函数过滤器,传入的键是一个空字符串,而值就是js对象
? 如下面一段代码
var obj = {
name: "过青年",
age: 20,
arr: [1,2,3,4],
location: "江西宜春",
school: {
location: "江西南昌"
}
};
? 根据上面这个js对象,执行下面的代码,JSON.stringify()
方法执行后,首先传入的键值对是"":obj
,没错,传入的键是一个空字符串,值就是JSON.stringify()
方法的第一个参数对象;然后这个对象进入函数里面,如下,返回undefined,再拿undefined去调用函数过滤器,返回undefined;
// 过滤函数
var jsonText = JSON.stringify(obj,function(key,value){
switch (key) {
case "name":
return "哈哈哈";
default:
return undefined;
}
});
console.log(jsonText); //undefined
思考一下,用函数过滤器怎么将obj
对象序列化成只有name
一个键值对呢?
var jsonText = JSON.stringify(obj,function(key,value){
switch (key) {
case "":
return value;
case "name":
return "哈哈哈";
default:
return undefined;
}
});
console.log(jsonText); // {"name":"哈哈哈"}
使用JSON.parse()
方法时,第二个参数的还原函数第一次调用时,传入的键是一个空字符串,而值就是json对象
(2)要序列化的对象中的每一个对象都要经过过滤器
var obj = {
name: "过青年",
age: 20,
arr: [1,2,3,4],
location: "江西宜春",
school: {
name: "过青年",
age: 20,
arr: [1,2,3,4],
location: "江西南昌"
}
};
var jsonText = JSON.stringify(obj,function(key,value){
switch (key) {
case "name":
return "哈哈哈";
case "arr":
return [1];
default:
return value;
}
});
/*
{"name":"哈哈哈","age":20,"arr":[1],"location":"江西宜春","school":{"name":"哈哈哈","age":20,"arr":[1],"location":"江西南昌"}}
*/
console.log(jsonText); // {"name":"哈哈哈"}
如上,每一个对象都要经过过滤器