Comment puis-je convertir une chaîne JSON en un objet en JavaScript? Y a-t-il une méthode qui fait cela?
quelque chose comme: p>
6 Réponses :
Le site Web JSON.ORG donne la solution la plus simple: Edit: Oh. À droite. La solution eval code> est bonne si et uniquement si vous êtes sûr que vous pouvez faire confiance à la source pour produire des objets JSON corrects. Sinon, vous devrez utiliser un analyseur JSON - regarder les autres réponses. P> p>
Ce paragraphe couvre entièrement les implémentations JSON natives et les bibliothèques utilisant des implémentations JSON natives: http://fr.wikipedia.org/wiki/json#native_json P >
L'utilisation de la mise en œuvre du JSON native sera considérablement plus rapide / plus sûre que d'utiliser certaines bibliothèques JavaScript pour la même tâche. Toutefois, si certaines bibliothèques affirment que cela essaiera de l'utilisation de la mise en œuvre native chaque fois que possible - il est encore meilleur choix que l'utilisation de Json natif directement (compatibilité et autres). P>
Selon les commentaires et la question, il semble que vous utilisiez déjà JQuery. Dans ce cas, il est bon de savoir que JQuery est expédié avec une nouvelle parsejson () code > fonction depuis version 1.4.1 qui a été libéré tard Janvier cette année. Envisagez de mettre à niveau si vous n'êtes pas encore à 1.4.1. Voici un extrait de pertinence de sa documentation API:
Description strong>: prend une chaîne JSON bien formée et renvoie l'objet JavaScript résultant em>. P>
jquery.parsjson (JSON) forte> Version ajoutée: 1.4.1 p>
JSON STRUT> la chaîne JSON à analyser. p>
Passer dans une chaîne JSON malformée entraînera une exception. Par exemple, toutes les chaînes JSON malformées sont toutes mal formées: P>
{test: 1} code> (le test n'a pas de citations doubles autour de lui). LI>{'test': 1} code> ("test" utilise des guillemets simples au lieu de guillemets doubles). LI> ul>En outre, si vous ne transmettez rien, une chaîne vide, null ou non défini, 'null' sera renvoyé de
parsejson code>. Lorsque le navigateur fournit une implémentation native dejson.parse code>, jQuery l'utilise pour analyser la chaîne. Pour plus de détails sur le format JSON, voir http://json.org/ . P>
exemple: strong> p> Analyser une chaîne JSON. P>
var obj = jQuery.parseJSON('{"name":"John"}'); alert( obj.name === "John" );
Balusc: Je ne supprimerai pas la balise code> jQuery code>, mais pour la référence future, les balises sont pour la question i>, pas les réponses. La question ne limite pas les choix à JQuery, même s'il est ouvert à JQuery. Sur 6 réponses, le vôtre était le seul jQuery. Fondamentalement, ce n'est pas une question de jQuery et ne doit pas être étiqueté comme tel.
Vous pouvez également faire ce qui suit, ce qui est légèrement moins mauvais que Eval :): Tho comme indiqué par d'autres, si vous utilisez JQuery, optez pour la méthode de Parsjson intégrée. p> p>
Nice, mais je suppose que c'est aussi dangereux que eval code>
Bruno - Les mécaniciens sous les couvertures sont différents et si vous regardez le code JQuery, vous pouvez simplement voir quelque chose de ressembler à cela dans cette fonction (Parsejson: Fonction (A)). Voir Extraits ci-dessous pour la fonction JQuery de la source ..
Bruno,
Voici la méthode JQuery, que vous verrez, comme vous le verrez, utilise la même nouvelle fonction ("Retour ..). P>
parseJSON: function (a) {
if (typeof a !== "string" || !a) return null;
if (/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
.replace(/(?:^|:|,)(?:\s*\[)+/g, "")))
return z.JSON && z.JSON.parse ? z.JSON.parse(a) : (new Function("return " + a))();
else c.error("Invalid JSON: " + a)
}
Mais il utilise Json.Parse si disponible, qui est définitivement une bonne chose (TM). Sans l'objet JSON, il n'ya guère de meilleure manière de faire la conversion, car faire un analyseur JSON complet à JavaScript entraînerait sûrement quelque chose de plus lent que l'Eval.
Ammoq - Oui, absolument. Juste content qu'ils n'utilisaient pas la méthode d'évaluation comme l'esprit de secours que vous :)
Sans ou sans cadres (jQuery, etc.)?
(Et s'il vous plaît, pas
eval code>.)Est-ce que je manque quelque chose? ressemble à convertir de b> json, pas à
Je n'ai pas d'objet code> json code>, j'ai une chaîne
code>, donc c'est une chaîne à JSON.@Bruno: c'est une chaîne codée dans JSON i>. Vous souhaitez convertir une chaîne codée JSON en objets JavaScript. (JSON = objet javascript Notation i>.)
@Bruno: En outre, votre chaîne n'est pas dans la syntaxe JSON valide.
Dupliqué possible de sérialiser à JSON à JQuery