Comment analyser JSON avec le numéro en tant que clé

J'ai le json suivant, je n'ai aucun contrôle sur cette sortie malheureusement.

{ "questions": { "9733": { "text": "Star Trek or Star Wars?", "answers": { "41003": "Star Trek", "41004": "Star Wars", "41005": "Neither is superior in my opinion; both great in their own ways", "41006": "Not a fan", "41007": "I don't have an opinion on this" } }, "25272": { "text": "Which of these summer movies are you looking forward to the most?", "answers": { "99545": "World War Z", "99546": "Monsters University ", "99547": "White House Down", "99548": "Man of Steel", "99549": "Lone Ranger", "99550": "The Wolverine" } }, "27547": { "text": "Should the US attack Syria?", "answers": { "107453": "Yes", "107454": "No" } } } } 

J'utilise json.parse pour analyser ceci. Pour obtenir le texte de la première question, je ferais normalement quelque chose comme ça.

 var jsonData = JSON.parse(data);//Where data = the json above console.log(jsonData.questions.9733.text);//Obviously this fails 

Cependant, javascript n'aime pas ce numéro. Comment recommanderiez-vous d'accéder au texte de la première question? Je préférerais que le json soit mieux configuré dans une série de questions à la place. Malheureusement, je n'ai aucun contrôle sur la sortie de cette JSON.

Je ne vais pas non plus savoir ce que sont les clés à mesure qu'elles se rencontrent, mais c'est un autre problème. Je suis prêt à avoir des suggestions sur la façon d'analyser cette chose car je n'ai jamais eu à analyser une sortie JSON si étrange.

Vous devez utiliser la notation de bracket :

 console.log(jsonData.questions["9733"].text); 

Mais parce que la valeur dans les parenthèses sera automatiquement converti en chaîne, cela fonctionnerait également:

 console.log(jsonData.questions[9733].text); 

Notez cependant que l'utilisation de non-chaînes est comme les noms de propriété généralement mauvaise forme et pourrait entraîner des problèmes subtils, par exemple, si le nom de la propriété était "001" , alors [001] ne fonctionnerait pas .

Pourquoi n'essayez-vous pas?

 jsonData["questions"]["9733"] 

Comment accéder à une propriété numérique?

Je crois que vous pouvez accéder aux données via la même syntaxe que dans un tableau:

 console.log(jsonData.questions[9733].text); 

Si vous devez utiliser les chiffres en tant que clés … vous pouvez les accéder comme ceci:

 var text = jsonData.questions["9733"].text; 

Edit: Vous pouvez également y accéder avec le numéro 9733. Il ne doit pas nécessairement être une chaîne. Il suffit d'être une chaîne si la clé est non numérique.