En toute sécurité en tournant une chaîne JSON en objet
Donné une chaîne de données JSON, comment pouvez-vous tourner en toute sécurité en chaîne dans un objet JavaScript?
Évidemment, vous pouvez le faire mal avec quelque chose comme...
var obj = eval("(" + json + ')');
...mais qui nous laisse vulnérables à la chaîne json contenant un autre code, qui semble très dangereux de simplement eval.
- Dans la plupart des langues eval comporte un risque supplémentaire. Eval laisse une porte ouverte pour être exploitées par les pirates. CEPENDANT, rappelez-vous que tous les javascript s'exécute sur le client. ATTENDEZ-vous qu'il sera modifié par les pirates. Ils peuvent EVAL ce qu'ils veulent, juste à l'aide de la console. Vous devez construire votre protection sur le côté serveur.
- Ok, maintenant c'est en 2014 et que vous ne devez jamais utiliser
eval
afin d'analyser une chaîne JSON parce que vous serait d'exposer votre code pour "injection de code". UtilisationJSON.parse(yourString)
à la place. - Est les données JSON littérale ?
- si tu veux dire un type de données scalaires, oui, il est. Est juste une chaîne avec une valeur-clé de la syntaxe en elle.
Vous devez vous connecter pour publier un commentaire.
JSON.parse(jsonString)
est un pur JavaScript approche, aussi longtemps que vous pouvez garantir raisonnablement navigateur moderne.Requires document to be in IE8+ standards mode to work in IE8.
try{} catch(e){}
'{"color": "deep </script><script>alert('pwnd!')</script> purple"}'
?JSON.parse(str)
est lui-même en sécurité. Au moment de mon premier commentaire, mon contexte n'était pas si ce morceau de code existe à l'intérieur d'un <script> tag rendu dans un navigateur côté client, etstr
contient des données définies par l'utilisateur, éventuellement interpolées par un modèle, puis des pièces destr
pourrait être interprété comme du code exécutable, stackoverflow.com/a/37920555/645715La méthode jQuery est maintenant obsolète. L'utilisation de cette méthode à la place:
Original de la réponse à l'aide obsolète fonctionnalités jQuery:
Si vous utilisez jQuery suffit d'utiliser:
C'est exactement ce que vous cherchez pour (voir le jQuery la documentation).
jQuery.parseJSON
par défaut à l'aide deJSON.parse
si elle existe, de sorte que la seule raison d'utiliser ce réel est de savoir si vous avez besoin d'une solution de repli pour <IE7. Il a été changé le chemin du retour en jQuery 1.6: james.padolsey.com/jquery/#v=1.6.0&fn=jQuery.parseJSONEdit: Cette réponse est pour IE < 7, pour les navigateurs modernes vérifier la réponse de Jonathan ci-dessus.
Edit: Cette réponse est obsolète et La réponse de Jonathan ci-dessus (
JSON.parse(jsonString)
) est aujourd'hui le meilleure réponse.JSON.org a JSON analyseurs pour de nombreuses langues, dont 4 différentes pour Javascript. Je crois que la plupart des gens considèrent json2.js leur goto mise en œuvre.
Utilisation simple code représenté dans ce qui suit lien sur le site MSDN.
et inverse
Je ne suis pas sûr d'autres façons de le faire, mais voici comment vous le faites dans Prototype JSON (tutoriel).
Appel evalJSON() avec vrai que l'argument assainit la future chaîne.
Ce qui semble être la question:
Une entrée est reçu, via ajax websocket etc, et il est toujours va être dans un format de Chaîne - mais vous devez le savoir si c'est du JSON.analysée. Trouble de la est que, si vous avez toujours le lancer à travers un JSON.l'analyse, le programme PEUT continuer avec succès, mais vous aurez toujours de voir une erreur jeté dans la console avec le redoutable "Error: unexpected token 'x'".
(function(){ postCookiesToHostileServer(); }());
ou même les plus méchants des choses dans le contexte de Nœud.Si vous utilisez jQuery, vous pouvez aussi simplement faire
$.getJSON(url, function(data) { });
Alors vous pouvez faire des choses comme
data.key1.something
,data.key1.something_else
, etc.Le rappel est passé le retour de données, qui seront un objet JavaScript ou un tableau tel que défini par la structure JSON et analysées à l'aide de la
$.parseJSON()
méthode.Juste pour le fun, voici le chemin à l'aide de la fonction :
eval
de le faire et n'est pas sûr. 😛eval
mais il est plus compliqué et plus difficile pour les développeurs afin de les comprendre.Essayez d'utiliser la méthode avec cet objet de Données. ex:
Data='{result:true,count:1}
'Cette méthode aide vraiment en Nodejs lorsque vous travaillez avec le port série de la programmation
eval
ouFunction
est tout aussi vulnérablesundefined; function bye() {...} bye();
À l'aide de JSON.analyser est probablement la meilleure façon. Voici un exemple démonstration en direct
La façon la plus simple à l'aide de
parse()
méthode:alors vous pouvez obtenir les valeurs de la
Json
éléments, par exemple:À l'aide de jQuery comme décrit dans la la documentation:
J'ai trouvé une "meilleure" façon:
En CoffeeScript:
En Javascript:
json.analyser va changer en objet.
JSON l'analyse est toujours une douleur dans le cul. Si l'entrée n'est pas comme prévu, il renvoie une erreur et une panne de ce que vous faites. Vous pouvez utiliser les minuscules fonction en toute sécurité analyse de votre entrée. Il tourne toujours un objet, même si l'entrée n'est pas valide ou est déjà un objet qui est le mieux pour la plupart des cas.
Object.prototype.toString.call(input) === '[object Object]'
devrait êtretypeof input === 'object'
de l'OMInull
cas avant, et un tableau est un Objet. Si vous voulez tester, vous pouvez utiliserinstanceof
. De plus, si vous donnez à cette fonction unArray
, il va attraper etreturn def
quand elle pourrait avoir retourné le parfait tableau.toString()
méthode pour vérifier si une variable est un objet ou non. Voir AngularJS, jQuery, trait de Soulignement, ou encore devstoString
? Il se sent peu fiable pour moi de compter sur la chaîne de la représentation de l'objet pour faire ce genre de test. Vous êtes à l'aide d'un cas précis de latoString
représentation de vérifier si c'est un objet ou non. Mais que faire si vous voulez améliorer votre fonction et de tester si c'est un tableau ? Souhaitez-vous utilisertoString
avecsubstring
?La conversion de l'objet en JSON, puis l'analyser, fonctionne pour moi, comme:
Si nous avons une chaîne comme ceci:
"{\"statut\":1,\"jeton\":\"65b4352b2dfc4957a09add0ce5714059\"}"
ensuite, nous pouvons simplement utiliser JSON.analyser les à deux reprises pour convertir cette chaîne de caractères dans un objet JSON:
Et simplement, nous pouvons extraire des valeurs d'objet JSON à l'aide de:
Le résultat sera:
JSON.parse() convertit toute Chaîne JSON passée dans la fonction, pour un Objet JSON.
Pour une Meilleure compréhension appuyez sur F12 pour ouvrir Inspecter l'Élément de votre navigateur et accédez à la console d'écrire des commandes suivantes : -
Maintenant, exécutez la commande :-
vous obtiendrez en sortie de l'Objet {résultat: true, count: 1}.
Afin d'utiliser l'Objet, vous pouvez l'affecter à la variable disons obj :-
Maintenant en utilisant obj et un point(.) l'opérateur, vous pouvez accéder aux propriétés de l'Objet JSON.
Essayez d'exécuter la commande
Officiellement documentée:
La
JSON.parse()
méthode d'analyse une chaîne JSON, la construction de la valeur JavaScript ou de l'objet décrit par la chaîne. Une option dereviver
fonction peut être fourni pour effectuer une transformation sur l'objet avant de la restituer.Syntaxe
Paramètres
texte
La chaîne à parser JSON. Voir l'objet JSON pour une description de la syntaxe JSON.
reviver (facultatif)
Si une fonction, cette prescrit la manière dont la valeur à l'origine produites par l'analyse est transformé, avant d'être renvoyé.
Valeur de retour
L'Objet correspondant à la donnée JSON texte.
Exceptions
Déclenche une exception SyntaxError si la chaîne à analyser n'est pas valide JSON.
Vous pouvez également utiliser
reviver
fonction de filtre.pour plus d'informations lire JSON.analyser
Âgées question, je sais, mais personne ne avis cette solution à l'aide de
new Function()
, une fonction anonyme qui renvoie les données.Juste un exemple:
C'est un peu plus sûr, car il s'exécute à l'intérieur d'une fonction et de ne pas compiler votre code directement. Donc si il y a une déclaration de fonction à l'intérieur, il ne sera pas lié à la fenêtre par défaut de l'objet.
Je l'utilise pour 'compiler' paramètres de configuration des éléments du DOM (par exemple l'attribut data) simple et rapide.
Analyser la chaîne json JSON.parse(), et les données devient un objet JavaScript.
Ici, JSON représente pour traiter json dataset.
Exemple,
Imaginez, nous avons reçu ce texte à partir d'un serveur web:
À analyser en objet json :
Ici obj est respectifs objet JSON qui ressembler à ce qui suit.
Pour récupérer la valeur utilisée . opérateur Exemple :
Pour le transfert à l'opposé, Convertir un objet JavaScript dans une chaîne JSON.stringify().
Résumé:
Javascript (à la fois navigateur et NodeJS) est intégré dans le
JSON
objet. Sur cet Objet sont 2 méthodes pratiques pour traiter lesJSON
. Ils sont les suivants:JSON.parse()
PrendJSON
comme argument, retourne JS objetJSON.stringify()
Prend JS objet comme argument renvoieJSON
objetD'autres applications:
En outre, pour la très commodément traiter avec
JSON
ils ont peut être utilisée pour d'autres moyens. La combinaison des deuxJSON
méthodes nous permet de rendre très facile de faire de profondeur clones de tableaux ou d'objets. Par exemple:JS:
De l'essayer.Ce texte est écrit en caractères d'imprimerie.
JSON.parse()
?