从完全限定的字符串中获取JSON属性

时间:2013-02-15 16:05:15

标签: javascript json

假设我有一个像这样的JSON对象:

var a = {
  "b" : {
    "c" : 1
  }
}
当我知道字符串“b.c”时,有没有快速获取c的方法?

我想我可以用点分割字符串然后从那里钻取到c但是我希望有一个快速的方法可以一次性完成。

像我希望的那样var c = a["b.c"],但那不起作用

2 个答案:

答案 0 :(得分:4)

如你所建议的那样使用分割:

var a = {
  "b" : {
    "c" : 1
  }
}

var n = "b.c".split(".");
var x = a;
for(var i = 0; i < n.length; i++){
   x = x[n[i]];
}
//x should now equal a.b.c

Here is a working example


如果路径无效,则应进行一些额外的检查。正如我的代码所示,如​​果路径的最后部分无效(例如“b.d”),x将为undefined。如果路径的任何其他部分无效(例如“d.c”),那么javascript将会出错。

这是一个修改过的示例,它将在undefined的第一个实例处结束循环,这将x保留为undefined并确保javascript可以继续执行(无错误) !)......

var n = "d.c".split(".");
var x = a;
for (var i = 0; i < n.length; i++) {
    x = x[n[i]];
    if (typeof(x) == "undefined") {
        break;
    }
}

Here is an example of this in action

答案 1 :(得分:1)

var a = {
  "b" : {
    "c" : 1
  }
}

var c = "b.c".split(".").reduce(function(obj, key) {
    return obj[key];
}, a);

alert(c)

reduce。该链接还显示了如何为不支持ES5的浏览器实现shim。请注意,此代码已简化,假设键存在于对象中。