J'ai une chaîne dans une application serveur Java accessible via AJAX. Cela ressemble à ceci:
var json = [{
"adjacencies": [
{
"nodeTo": "graphnode2",
"nodeFrom": "graphnode1",
"data": {
"$color": "#557EAA"
}
}
],
"data": {
"$color": "#EBB056",
"$type": "triangle",
"$dim": 9
},
"id": "graphnode1",
"name": "graphnode1"
},{
"adjacencies": [],
"data": {
"$color": "#EBB056",
"$type": "triangle",
"$dim": 9
},
"id": "graphnode2",
"name": "graphnode2"
}];
Lorsque la chaîne est extraite du serveur, existe-t-il un moyen simple de transformer cela en un objet (ou tableau) JavaScript vivant? Ou dois-je diviser manuellement la chaîne et créer mon objet manuellement?
Réponses:
Prise en charge des navigateurs modernes
JSON.parse()
.Dans les navigateurs qui ne le font pas, vous pouvez inclure la
json2
bibliothèque .la source
L'intérêt de JSON est que les chaînes JSON peuvent être converties en objets natifs sans rien faire. Vérifiez ce lien
Vous pouvez utiliser soit
eval(string)
ouJSON.parse(string)
.Cependant,
eval
c'est risqué. De json.org:la source
Faites comme jQuery! (l'essence)
De cette façon, vous n'avez pas besoin de bibliothèque externe et cela fonctionne toujours sur les anciens navigateurs.
la source
eval()
.Pour collecter tous les éléments d'un tableau et renvoyer un objet json
Pour analyser les mêmes données que nous traversons comme ça
la source
Vous pouvez également utiliser
eval()
maisJSON.parse()
c'est plus sûr et plus simple, alors pourquoi le feriez-vous?bon et fonctionne
Je ne vois aucune raison pourquoi préféreriez-vous utiliser
eval
. Cela ne fait que mettre votre application en danger.Cela dit - c'est également possible.
mauvais - mais fonctionne aussi
Pourquoi est-ce
eval
une mauvaise idée?Prenons l'exemple suivant.
Un tiers ou un utilisateur a fourni des données de chaîne JSON.
Votre script côté serveur traite ces données.
En utilisant
JSON.parse
:jettera:
La fonction ne sera pas exécutée.
Tu es en sécurité.
En utilisant
eval()
:exécutera la fonction et renverra le texte.
Si je remplace cette fonction inoffensive par une qui supprime les fichiers de votre dossier de site Web, vous avez été piraté. Aucune erreur / avertissement ne sera généré dans cet exemple.
Vous n'êtes PAS en sécurité.
J'ai pu manipuler une chaîne de texte JSON pour qu'elle agisse comme une fonction qui s'exécutera sur le serveur.
eval(JSON)[0].adjacencies[0].nodeTo
s'attend à traiter une chaîne JSON mais, en réalité, nous venons d'exécuter une fonction sur notre serveur.Cela pourrait également être évité si nous vérifions côté serveur toutes les données fournies par l'utilisateur avant de les transmettre à une
eval()
fonction, mais pourquoi ne pas simplement utiliser l'outil intégré pour analyser JSON et éviter tous ces problèmes et dangers?la source
Et si vous souhaitez également que l'objet désérialisé ait des fonctions, vous pouvez utiliser mon petit outil: https://github.com/khayll/jsmix
la source
Si vous collez la chaîne côté serveur dans le html, vous n'avez rien à faire:
Pour Java simple en JSP:
Pour les entretoises de largeur jsp:
la source
Je pense que cela devrait aider:
Les documentations prouvent également que vous pouvez utiliser require () pour les fichiers json: https://www.bennadel.com/blog/2908-you-can-use-require-to-load-json-javascript-object-notation-files -en-node-js.htm
la source