2011-03-23 4 views
0

Disons que j'ai un fichier de configuration dans lequel j'ai des chemins vers les propriétés JSON. Mon JSON ressemble:Accès aux propriétés JSON JavaScript imbriquées via les variables

var test = { test: { test2: { test3: 1 } } } 

et j'ai une chaîne str = "test.test2.test3"

Je sais que je peux accéder au plus haut niveau un comme celui-ci: var foo = "test", test[foo]

Mais test["test.test2.test3"] ne fonctionne pas. D'autre part test["test"]["test2"]["test3"] fonctionne, mais ce n'est pas un doublure si j'ai des objets plus complexes (certains peuvent être 5 niveaux, certains peuvent être 3 etc)

Y at-il un moyen d'accéder à cette propriété directement au lieu de diviser sur le point et en boucle à travers?

+2

Ce n'est pas JSON, c'est un littéral d'objet JavaScript. JSON est un format de données basé sur un sous-ensemble de JavaScript (auquel ce code n'est pas conforme). – Quentin

Répondre

4
with(test) eval(str); 

Est-ce que la tête de quelqu'un a explosé?

Il est ça ou

eval('test.' + str); 

Faites votre choix parmi le mauvais panier de pratique.

Bien que pour le premier exemple, si vous voulez vraiment la valeur que vous voulez faire ce

var value; 
with(test) value = eval(str); 

Mais ce genre de Enlève de la pureté de ce chef-d'œuvre mauvaise pratique.

+0

Ah merci, eval complètement glissé mon esprit, pour ces raisons. Je n'ai pas encore vu, donc c'est intéressant. –

Questions connexes