7
votes

Comment convertir une chaîne JSON en un objet?

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: xxx


7 commentaires

Sans ou sans cadres (jQuery, etc.)?


(Et s'il vous plaît, pas eval .)


Est-ce que je manque quelque chose? ressemble à convertir de json, pas à


Je n'ai pas d'objet json , j'ai une chaîne , donc c'est une chaîne à JSON.


@Bruno: c'est une chaîne codée dans JSON . Vous souhaitez convertir une chaîne codée JSON en objets JavaScript. (JSON = objet javascript Notation .)


@Bruno: En outre, votre chaîne n'est pas dans la syntaxe JSON valide.


Dupliqué possible de sérialiser à JSON à JQuery


6 Réponses :


5
votes

Utilisez JSON2 LIB: http://www.json.org/js.html


0 commentaires

0
votes

Le site Web JSON.ORG donne la solution la plus simple: xxx

Plus d'informations

Edit: Oh. À droite. La solution eval 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.


0 commentaires

1
votes

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

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).


0 commentaires

9
votes

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 de json.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" );
    


1 commentaires

Balusc: Je ne supprimerai pas la balise jQuery , mais pour la référence future, les balises sont pour la question , 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.



0
votes

Vous pouvez également faire ce qui suit, ce qui est légèrement moins mauvais que Eval :): XXX

Tho comme indiqué par d'autres, si vous utilisez JQuery, optez pour la méthode de Parsjson intégrée.


2 commentaires

Nice, mais je suppose que c'est aussi dangereux que eval


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 ..



2
votes

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)
}


2 commentaires

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 :)