2012-09-13 69 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"); 

它是危險的,雖然,不使用[],但如果你想要使用一個字符串來訪問它的任何對象