Comment accéder aux données JSON imbriquées
Disons que j'ai des données json comme
data = {"id":1,
"name":"abc",
"address": {"streetName":"cde",
"streetId":2
}
}
Maintenant, je reçois des champs pour être accessible à partir de données json comme : fields = ["id", "name", "address.streetName"]
Comment pourrais-je accéder à la troisième champ (address.streetName
) à partir des données json dans le moyen le plus efficace?
data.fields[2]
ne fonctionne pas
Une possibilité est que j'construire data[address][streetName]
chaîne à l'aide d'une boucle for et do eval, mais est-il un moyen efficace de faire cela?
source d'informationauteur user999491
Vous devez vous connecter pour publier un commentaire.
Pour être honnête, je ne comprends pas votre problème. JSON est déjà structuré, pourquoi avez-vous besoin de modifier la structure?
Dans votre cas, je voudrais y accéder comme suit:
Si, par hasard, ce que vous voulez, c'est traverse les données, vous devez:
Mise à jour
Après la lecture ci-dessous, ce que les besoins de l'utilisateur semble plus évident. Étant donné les noms de propriété en tant que chaîne, s il veut accéder à l'objet.
Si vous utilisez lodash(très populaire utilitaire de bibliothèque), vous pouvez utiliser
_.get()
.par exemple
Si il s'agit d'un tableau, vous pouvez utiliser la chaîne de chemin comme
'address[0].streetName'
.par exemple
En interne, il utilise
toPath()
fonction pour convertir chemin de la chaîne (par exemple,address.streetName
) dans un tableau (par exemple,['address', 'streetName']
), puis utilise une fonction pour accéder aux données au niveau de la voie à l'intérieur de l'objet.D'autres semblables, les fonctions de l'utilitaire d'inclure
_.set()
et_.has()
. Les vérifier.Longue histoire courte, vous pouvez utiliser la notation de tableau
object[property]
au lieu deobject.property
; cela est particulièrement utile lorsque les touches contient des caractères spéciaux:Vous pouvez utiliser le
typeof
opérateur pour vérifier si une propriété existe ou pas avant de l'utiliser:Votre
data
variable n'ont pasfields
de la propriété, et c'est pourquoidata.fields[2]
ne fonctionne pas. Je pense que ce que vous essayez de faire il y adata[fields[2]]
qui travaillerait pour un simple objet, mais vous ne pouvez pas l'index dans un objet complexe comme ça.vous pouvez y accéder de cette façon
data.address.streetName
JavaScript:
De sortie: