Mon Sens d'Araignée me prévient que l'utilisation d' eval()
analyser entrant JSON est une mauvaise idée. Je me demandais simplement si JSON.parse()
- ce qui je suppose est une partie de JavaScript et pas un navigateur spécifique à la fonction - qui est plus sûr.
Réponses
Trop de publicités?Tous JSON.parse
des implémentations plus probablement, eval()
JSON.parse
est basé sur Douglas Crockford de la solution, qui utilise eval()
sur la ligne 469.
// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.
j = eval('(' + text + ')');
L'avantage de l' JSON.parse
, c'est qu'il vérifie l'argument est correct syntaxe JSON.
Tous les navigateurs ont native prise en charge de JSON, donc il y aura des moments où vous devez utiliser eval()
de la chaîne JSON. L'utilisation de JSON analyseur de http://json.org que qui gère tout ce qui beaucoup plus facile pour vous.
Eval()
est un mal, mais contre certains navigateurs ses un mal nécessaire, mais où vous pouvez l'éviter, faire!!!!!!!
Il y a une différence entre ce que JSON.parse() et la fonction eval() accepte. Essayez eval sur ceci:
var x = "{\"shoppingCartName\":\"panier_achat:2000\"}"
eval(x) //won't work
JSON.parse(x) //does work
Voir cet exemple.
Si vous parser le JSON avec eval
, vous êtes en permettant à la chaîne d'être analysée afin de contenir absolument n'importe quoi, donc au lieu d'être simplement un ensemble de données, vous pourriez vous retrouver à l'exécution des appels de fonction, ou que ce soit.
Aussi, JSON de l' parse
accepte un second paramètre, reviver, qui vous permet de spécifier la façon de traiter avec certaines valeurs, telles que datetimes (plus d'info et l'exemple dans la ligne de la documentation ici)