JSON使用:第一次调用的函数过滤器,传入的键是一个空字符串

(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":"哈哈哈"}

如上,每一个对象都要经过过滤器

猜你喜欢

转载自blog.csdn.net/qq_44701189/article/details/107326704