关于JSON的一个问题

下面是一个JSON转换成object的方法,为什么我把第二个return给注释了,得到的是undefine?我在if语句里不是已经返回了吗?如果说是if语句没有执行但是console.log的结果却是"小明同学",说明它已经执行了if语句啊

var a = JSON.parse('{"name":"小明","age":14}',function (key,value) {
            if(key === "name"){
                return value+"同学";
            }
//            alert(111);
//            return value;
        });
        console.log(a);
阅读 2.8k
4 个回答

解决方法:

var a = JSON.parse('{"name":"小明","age":14}',function (key,value) {debugger
            if(key === "name"){
                return value+"同学";
            }
            else if(key === ""){return value}
            else {return undefined;}
        });

当遍历到最顶层的值(解析值)时,传入 reviver 函数的参数会是空字符串 ""(因为此时已经没有真正的属性)和当前的解析值(有可能已经被修改过了),当前的 this 值会是 {"": 修改过的解析值},在编写 reviver 函数时,要注意到这个特例。(译者按:这个函数的遍历顺序按深度优先遍历)

JSON.parse('{"p": 5}', function (k, v) {
    if(k === '') return v;     // 如果到了最顶层,则直接返回属性值,
    return v * 2;              // 否则将属性值变为原来的 2 倍。
});                            // { p: 10 }

JSON.parse('{"1": 1, "2": 2,"3": {"4": 4, "5": {"6": 6}}}', function (k, v) {
    console.log(k); // 输出当前的属性名,从而得知遍历顺序是从内向外的,
                    // 最后一个属性名会是个空字符串。
    return v;       // 返回原始属性值,相当于没有传递 reviver 参数。
});

// 1
// 2
// 4
// 6
// 5
// 3 
// ""

谢邀

var a = JSON.parse('{"name":"小明","age":14}',function (key,value) {
            if(key === "name") return value+"同学";
            return value;
        });
console.log(a);

说明 if(key === "name") 不成立呗

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题