javascript - 关于JSON的一个问题
伊谢尔伦
伊谢尔伦 2017-04-11 11:25:58
[JavaScript讨论组]

下面是一个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);
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(4)
PHP中文网

解决方法:

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 
// ""
怪我咯

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

大家讲道理

谢邀

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

https://developer.mozilla.org...

遍历的时候,最后一次key是"",需要直接返回原值。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号