287 votes

désérialiser de json à javascript objet

J'ai une chaîne sur une application serveur Java accessible via AJAX. Cela ressemble à ce qui suit.

 var json = [{
    "adjacencies": [
        {
          "nodeTo": "graphnode2",
          "nodeFrom": "graphnode1",
          "data": {
            "$color": "#557EAA"
          }
        }
    ],
    "data": {
      "$color": "#EBB056",
      "$type": "triangle",
      "$dim": 9
    },
    "id": "graphnode1",
    "name": "graphnode1"
},{
    "adjacencies": [],
    "data": {
      "$color": "#EBB056",
      "$type": "triangle",
      "$dim": 9
    },
    "id": "graphnode2",
    "name": "graphnode2"
}];
 

Lorsque la chaîne est extraite, existe-t-il un moyen facile de le transformer en objet Javascript (ou tableau) vivant? Ou dois-je diviser manuellement la chaîne et créer mon objet manuellement?

431voto

user113716 Points 143363

Les navigateurs modernes prennent en charge JSON.parse() .

 var arr_from_json = JSON.parse( json_string );
 

Dans les autres navigateurs, vous pouvez inclure la bibliothèque json2 .

27voto

Abhinav Points 10339

Le point de l'ensemble de JSON est que les chaînes JSON peuvent être convertis à des objets natifs sans rien faire. Vérifier ce lien

Vous pouvez utiliser la fonction eval(string) ou JSON.parse(string).

Cependant, eval est risqué. À partir de json.org

La fonction eval est très rapide. Cependant, il permet de compiler et de l'exécuter tout programme JavaScript, donc il peut y être des problèmes de sécurité. L'utilisation de eval est indiqué lorsque la source est fiable et compétentes. Il est beaucoup plus sûr à utiliser un parser JSON. Dans les applications web plus de XMLHttpRequest, la communication est autorisés que pour la même origine que fournir de la page, de sorte qu'il est digne de confiance. Mais il pourrait ne pas être compétent. Si l' le serveur n'est pas rigoureux dans son JSON le codage, ou si elle n'a pas scrupuleusement valider l'ensemble de ses entrées, alors il pourrait être de livrer non valide JSON texte qui pourrait être porteur les scripts dangereux. La fonction eval exécuter le script, de libérer sa malice.

16voto

Ravan Points 2688

Faites comme jQuery! (l'essence)

 function parseJSON(data) {
    return window.JSON && window.JSON.parse ? window.JSON.parse( data ) : (new Function("return " + data))(); 
}
// testing
obj = parseJSON('{"name":"John"}');
alert(obj.name);
 

De cette façon, vous n'avez besoin d'aucune bibliothèque externe et cela fonctionne toujours sur les anciens navigateurs.

8voto

Tarun Gupta Points 1369

POUR collecter tous les éléments d'un tableau et renvoyer un objet json

 collectData: function (arrayElements) {

        var main = [];

        for (var i = 0; i < arrayElements.length; i++) {
            var data = {};
            this.e = arrayElements[i];            
            data.text = arrayElements[i].text;
            data.val = arrayElements[i].value;
            main[i] = data;
        }
        return main;
    },
 

Pour analyser les mêmes données que nous passons comme ça

 dummyParse: function (json) {       
        var o = JSON.parse(json); //conerted the string into JSON object        
        $.each(o, function () {
            inner = this;
            $.each(inner, function (index) {
                alert(this.text)
            });
        });

}
 

0voto

surfealokesea Points 982

Si vous collez la chaîne côté serveur dans le code HTML, vous n'avez rien à faire:

Pour java plain en jsp:

 var jsonObj=<%=jsonStringInJavaServlet%>;
 

Pour les entretoises de largeur jsp:

 var jsonObj=<s:property value="jsonStringInJavaServlet" escape="false" escapeHtml="false"/>;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X