2012-09-13 39 views
0

让我们的我有下一个对象的JavaScript得到json的内在价值

var o = { "foo" : {"bar" : "omg"} }; 

我可以用

o["foo"] // return {"bar" : "omg"} 

获得的关键foo价值,我可以用进去foo的关键bar

o["foo"]["bar"] // return "omg" 

我可以在内获得钥匙bar的价值吗单独使用括号[]
Somethong像

o["foo.bar"] // not working(

o["foo/bar"] // not working(
+0

'o ['foo'] ['bar']'或'o.foo.bar'怎么了? –

+1

不,你可以做'o.foo.bar' –

+0

很明显,你不会问这是否只需要'omg',而不是另一种方式,对吧?你需要找到o.foo属性的名称(这将是'bar'),对吗? – raina77ow

回答

3

创建一个getter函数来做这样的事情是相当普遍的。从评论:

我有对象o和字符串'foo.bar',我想要“omg”。

var getProp = function (theObject, propString) { 
    var current = theObject; 
    var split = propString.split('.'); 

    for (var i = 0; i < split.length; i++) { 
     if (current.hasOwnProperty(split[i])) { 
      current = current[split[i]]; 
     } 
    } 

    return current; 
}; 

http://jsfiddle.net/MXu2M/

注:这是一起引发例子,你会想防弹和删除它在你的网站之前,磨光。

+0

Thx,它很好用 – Ilya

0

不幸的是,你只能使用o["foo"]["bar"]o.foo.bar

0

不行,你必须使用o["foo"]["bar"],因为它的另一个对象中的对象。如果你想用“foo.bar”来访问它,就意味着你必须创建的第一个对象是这样的:

var o = {"foo.bar": "omg"} 
0

o["foo.bar"]o["foo/bar"]不适用于你的榜样。你可以使用这个符号是清洁:

var bar = o.foo.bar // bar will contain 'omg' 
+0

为什么'-1'?...... –

0

有一种方法,但我不知道这是你的要求为:

eval("o.foo.bar"); 

它是危险的,虽然,不使用[],但如果你想要使用一个字符串来访问它的任何对象