2012-09-13 5 views
0

Let de I ont prochain objetjavascript obtenir la valeur intérieure JSON

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

je peux obtenir la valeur de foo clé à l'aide

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

et je peux obtenir la valeur de bar clé à l'intérieur foo utilisant

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

Puis-je obtenir la valeur de la clé à l'intérieur barfoo en utilisant les parenthèses [] seule fois.
Somethong comme

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

ou

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

ce qui est erroné avec 'o [ 'foo'] [ 'bar']' 'ou o.foo.bar'? –

+1

Non vous ne pouvez pas faire cela, mais vous pouvez faire 'o.foo.bar' –

+0

Évidemment, vous ne demanderiez pas si vous avez juste besoin d'obtenir « omg » une autre façon, non? Avez-vous besoin de trouver le nom de la propriété o.foo (qui serait «bar»), n'est-ce pas? – raina77ow

Répondre

3

Il est assez courant de créer une fonction getter pour faire quelque chose comme ça. Du commentaire:

J'ai l'objet et la chaîne 'foo.bar', et je veux obtenir "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/

Note: ceci est un exemple jeté ensemble, vous voudriez l'épreuve des balles et buff avant le laissant tomber sur votre site.

+0

Thx, ça marche bien – Ilya

0

Malheureusement, vous ne pouvez utiliser o["foo"]["bar"] ou o.foo.bar

0

Non, vous devez utiliser o["foo"]["bar"] parce qu'il est un objet dans un autre objet. Si vous voulez y accéder avec « foo.bar », cela signifie que vous devez créer le premier objet comme celui-ci:

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

o["foo.bar"] ou o["foo/bar"] ne sont pas valides pour votre exemple. Vous pouvez utiliser cette notation qui est plus propre:

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

pourquoi' -1'? ...... –

0

il y a une certaine façon, mais je ne suis pas sûr que ce soit ce que vous avez demandé:

eval("o.foo.bar"); 

il est dangereux cependant, et qui ne fonctionne pas utilisez [], mais si vous voulez utiliser une chaîne pour accéder à un objet, cela fonctionne