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.