Étant donné une chaîne de données JSON, comment puis-je transformer cette chaîne en un objet JavaScript en toute sécurité?
Évidemment, je peux le faire en toute sécurité avec quelque chose comme:
var obj = eval("(" + json + ')');
mais cela me rend vulnérable à la chaîne JSON contenant un autre code, qu'il semble très dangereux d'évaluer simplement.
javascript
json
Matt Sheppard
la source
la source
eval
pour analyser une chaîne JSON car vous exposeriez votre code à une "injection de code". UtilisezJSON.parse(yourString)
plutôt.Réponses:
JSON.parse(jsonString)
est une approche JavaScript pure tant que vous pouvez garantir un navigateur raisonnablement moderne.la source
Requires document to be in IE8+ standards mode to work in IE8.
La méthode jQuery est désormais obsolète. Utilisez plutôt cette méthode:
Réponse originale utilisant la fonctionnalité jQuery obsolète :
Si vous utilisez jQuery, utilisez simplement:
C'est exactement ce que vous recherchez (voir la documentation jQuery ).
la source
jQuery.parseJSON
utilise par défautJSON.parse
si elle existe, donc la seule raison de l'utiliser sur la vraie est si vous avez besoin d'une solution de rechange pour <IE7. Il a été changé depuis jQuery 1.6: james.padolsey.com/jquery/#v=1.6.0&fn=jQuery.parseJSONCette réponse est pour IE <7, pour les navigateurs modernes, vérifiez la réponse de Jonathan ci-dessus.
Cette réponse est obsolète et la réponse de Jonathan ci-dessus (
JSON.parse(jsonString)
) est maintenant la meilleure réponse .JSON.org possède des analyseurs JSON pour de nombreuses langues, dont quatre différentes pour JavaScript. Je pense que la plupart des gens considéreraient json2.js comme leur implémentation goto.
la source
Utilisez l'exemple de code simple dans " JSON.parse () ":
et l'inverser:
la source
Je ne suis pas sûr des autres façons de le faire, mais voici comment vous le faites dans Prototype (tutoriel JSON) .
L'appel
evalJSON()
avec true comme argument purifie la chaîne entrante.la source
Cela semble être le problème:
Une entrée reçue via Ajax websocket, etc., et elle sera au format String, mais vous devez savoir si elle l'est
JSON.parsable
. Le problème est que, si vous l'exécutez toujoursJSON.parse
, le programme PEUT continuer "avec succès" mais vous verrez toujours une erreur lancée dans la console avec le redouté"Error: unexpected token 'x'"
.la source
(function(){ postCookiesToHostileServer(); }());
choses encore plus méchantes dans le contexte de Node.Si vous utilisez jQuery , vous pouvez également utiliser:
Ensuite, vous pouvez faire des choses comme
etc.
la source
Le rappel est transmis aux données renvoyées, qui seront un objet ou un tableau JavaScript tel que défini par la structure JSON et analysé à l'aide de la
$.parseJSON()
méthode.la source
Juste pour le plaisir, voici un moyen d'utiliser une fonction:
la source
eval
et n'est pas sûr. : Peval
mais est plus compliqué et plus difficile à comprendre pour les responsables.L'utilisation
JSON.parse
est probablement la meilleure façon.Voici un exemple de démonstration en direct .
la source
La façon la plus simple d'utiliser la
parse()
méthode:Ensuite, vous pouvez obtenir les valeurs des éléments JSON, par exemple:
Utilisation de jQuery comme décrit dans la
jQuery.parseJSON()
documentation:la source
Essayez d'utiliser la méthode avec cet objet Data. ex:
Data='{result:true,count:1}
'Cette méthode aide vraiment dans Nodejs lorsque vous travaillez avec la programmation de port série
la source
eval
ouFunction
est tout aussi vulnérableundefined; function bye() {...} bye();
J'ai trouvé une "meilleure" façon:
Dans CoffeeScript:
En Javascript:
la source
L'analyse JSON est toujours pénible. Si l'entrée n'est pas celle attendue, elle génère une erreur et bloque ce que vous faites.
Vous pouvez utiliser la petite fonction suivante pour analyser en toute sécurité votre entrée. Il transforme toujours un objet même si l'entrée n'est pas valide ou est déjà un objet, ce qui est préférable dans la plupart des cas:
la source
Object.prototype.toString.call(input) === '[object Object]'
devrait être l'typeof input === 'object'
OMInull
cas auparavant, et un tableau est un objet. Si vous voulez le tester, vous pouvez l'utiliserinstanceof
. De plus, si vous donnez une fonction à cette fonctionArray
, elle va intercepter etreturn def
quand elle aurait pu retourner le tableau parfaitement fin.toString()
méthode pour vérifier si une variable est un objet ou non. Voir AngularJS , jQuery , Underscore ou même devsjson.parse se transformera en objet.
la source
Si nous avons une chaîne comme celle-ci:
alors nous pouvons simplement utiliser
JSON.parse
deux fois pour convertir cette chaîne en un objet JSON:Et nous pouvons extraire des valeurs de l'objet JSON en utilisant:
Le résultat sera:
la source
JSON.parse()
convertit toute chaîne JSON passée dans la fonction en un objet JSON.Pour mieux le comprendre, appuyez sur F12pour ouvrir «Inspecter l'élément» dans votre navigateur et accédez à la console pour écrire les commandes suivantes:
Exécutez maintenant la commande:
Vous obtiendrez une sortie en tant qu'objet
{result: true, count: 1}
.Pour utiliser cet objet, vous pouvez l'affecter à la variable, peut-être
obj
:En utilisant
obj
et l'.
opérateur point ( ), vous pouvez accéder aux propriétés de l'objet JSON.Essayez d'exécuter la commande:
la source
Documentation officielle :
La
JSON.parse()
méthode analyse une chaîne JSON, construisant la valeur ou l'objet JavaScript décrit par la chaîne. Unereviver
fonction facultative peut être fournie pour effectuer une transformation sur l'objet résultant avant son retour.Syntaxe:
Paramètres:
text
: La chaîne à analyser en JSON. Voir l'objet JSON pour une description de la syntaxe JSON.reviver (optional)
: S'il s'agit d'une fonction, elle prescrit comment la valeur produite à l'origine par l'analyse est transformée, avant d'être renvoyée.Valeur de retour
Objet correspondant au texte JSON donné.
Exceptions
Lève une exception SyntaxError si la chaîne à analyser n'est pas JSON valide.
la source
La conversion de l'objet en JSON, puis son analyse, fonctionne pour moi, comme:
la source
Analysez la chaîne JSON avec
JSON.parse()
et les données deviennent un objet JavaScript:Ici, JSON représente pour traiter l'ensemble de données JSON.
Imaginez que nous ayons reçu ce texte d'un serveur Web:
Pour analyser un objet JSON:
Voici
obj
l'objet JSON respectif qui ressemble à:Pour récupérer une valeur, utilisez l'
.
opérateur:Convertissez un objet JavaScript en chaîne avec
JSON.stringify()
.la source
Juste pour analyser la couverture pour différents types d'entrée
Analysez les données avec JSON.parse (), et les données deviennent un objet JavaScript.
Lors de l'utilisation de JSON.parse () sur un JSON dérivé d'un tableau, la méthode renvoie un tableau JavaScript au lieu d'un objet JavaScript.
Les objets de date ne sont pas autorisés dans JSON. Pour les dates, faites quelque chose comme ça
Les fonctions ne sont pas autorisées dans JSON. Si vous devez inclure une fonction, écrivez-la sous forme de chaîne.
la source
Question plus ancienne, je sais, mais personne ne remarque cette solution en utilisant
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 ne compile pas directement dans votre code. Donc, s'il y a une déclaration de fonction à l'intérieur, elle ne sera pas liée à l'objet window par défaut.
Je l'utilise pour «compiler» les paramètres de configuration des éléments DOM (par exemple l'attribut de données) de manière simple et rapide.
la source
Sommaire:
Javascript (navigateur et NodeJS) ont un
JSON
objet intégré . Sur cet objet sont 2 méthodes pratiques pour traiterJSON
. Ce sont les suivants:JSON.parse()
PrendJSON
comme argument, retourne un objet JSJSON.stringify()
Prend l'objet JS comme argument renvoie l'JSON
objetAutres applications:
En outre, pour les traiter très facilement,
JSON
ils peuvent être utilisés à d'autres fins. La combinaison des deuxJSON
méthodes nous permet de créer très facilement des clones profonds de tableaux ou d'objets. Par exemple:la source
Vous pouvez également utiliser la
reviver
fonction pour filtrer.Pour plus d'informations, lisez
JSON.parse
.la source
JSON.parse est la bonne façon de convertir une chaîne en objet, mais si la chaîne qui est analysée n'est pas un objet ou si la chaîne n'est pas correcte, elle générera une erreur qui provoquera la rupture du reste du code, ce qui signifie idéal pour envelopper la fonction JSON.parse dans try-catch comme
la source
Essayez ceci. Celui-ci est écrit en caractères dactylographiés.
la source
JSON.parse()
t-il?la source