Question Parse JSON en JavaScript? [dupliquer]


Cette question a déjà une réponse ici:

Je veux analyser une chaîne JSON en JavaScript. La réponse est quelque chose comme

var response = '{"result":true,"count":1}';

Comment puis-je obtenir les valeurs result et count de cela?


1509
2018-02-08 16:34


origine


Réponses:


La plupart des navigateurs supportent JSON.parse(), qui est défini dans ECMA-262 5th Edition (la spécification sur laquelle JavaScript est basé). Son utilisation est simple:

var json = '{"result":true,"count":1}',
    obj = JSON.parse(json);

alert(obj.count);

Pour les navigateurs qui ne le font pas, vous pouvez l'implémenter en utilisant json2.js.

Comme indiqué dans les commentaires, si vous utilisez déjà jQuery, il y a un $.parseJSON fonction qui correspond à JSON.parse si disponible ou une forme de eval dans les anciens navigateurs. Cependant, ceci effectue des vérifications supplémentaires inutiles qui sont également effectuées par JSON.parse, donc pour le meilleur rendement global, je recommande de l'utiliser comme ça:

var json = '{"result":true,"count":1}',
    obj = JSON && JSON.parse(json) || $.parseJSON(json);

Cela vous permettra d'utiliser natif JSON.parse immédiatement, plutôt que d'avoir jQuery effectuer des contrôles de santé sur la chaîne avant de la passer à la fonction d'analyse natif.


1863
2018-02-08 16:38



Tout d'abord, vous devez vous assurer que le code JSON est valide.

Après cela, je recommanderais d'utiliser une bibliothèque JavaScript telle que jQuery ou Prototype si vous le pouvez, car ces éléments sont bien gérés dans ces bibliothèques.

D'un autre côté, si vous ne voulez pas utiliser une bibliothèque et que vous pouvez vous porter garant de la validité de l'objet JSON, je placerais simplement la chaîne dans une fonction anonyme et j'utiliserais la fonction eval.

Ce n'est pas recommandé si vous obtenez l'objet JSON d'une autre source qui n'est pas absolument fiable parce que la fonction eval permet le code renégat si vous voulez.

Voici un exemple d'utilisation de la fonction eval:

var strJSON = '{"result":true,"count":1}';
var objJSON = eval("(function(){return " + strJSON + ";})()");
alert(objJSON.result);
alert(objJSON.count);

Si vous contrôlez le navigateur utilisé ou si vous n'êtes pas inquiet avec un navigateur plus ancien, vous pouvez toujours utiliser la méthode JSON.parse.

C'est vraiment la solution idéale pour l'avenir.


91
2018-02-08 16:46



Si vous obtenez ceci d'un site extérieur, il peut être utile d'utiliser getJSON de jQuery. Si c'est une liste, vous pouvez la parcourir avec $ .each

$.getJSON(url, function (json) {
    alert(json.result);
    $.each(json.list, function (i, fb) {
        alert(fb.result);
    });
});

49
2017-07-18 21:57



Si vous voulez utiliser JSON 3 pour les navigateurs plus anciens, vous pouvez le charger avec:

<script>
    window.JSON || 
    document.write('<script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.2.4/json3.min.js"><\/scr'+'ipt>');
</script>

Maintenant, la norme window.JSON L'objet est disponible pour vous quel que soit le navigateur utilisé par un client.


32
2018-04-19 18:52



L'exemple suivant rendra clair:

var jsontext   = '{"name":"x","age":"11"}';
var getContact = JSON.parse(jsontext);
document.write(getContact.name + ", " + getContact.age);

// Output: x, 11

OU

Vous pouvez également utiliser le eval fonction. L'exemple suivant utilise le eval fonction:

var jsontext   = '{"name":"x","age":"11"}';
var getContact = eval('(' + jsontext + ')');
document.write(getContact.name + ", " + getContact.age);

// Output: x, 11

Depuis le JSON.parse la fonction est plus sécurisée et s'exécute plus vite que la fonction eval, je vous recommande d'utiliser JSON.parse fonction.


31
2017-10-01 07:42



Si vous passez une variable de chaîne (une chaîne JSON bien formée) à JSON.parse de MVC @Viewbag qui a la double-citation '' ', comme guillemets, vous devez le traiter avant JSON.parse (jsonstring)

    var jsonstring = '@ViewBag.jsonstring';
    jsonstring = jsonstring.replace(/&quot;/g, '"');  

25
2017-10-22 15:06



Vous pouvez soit utiliser la fonction eval comme dans d'autres réponses. (Ne pas oublier les accolades supplémentaires.) Vous saurez pourquoi lorsque vous creusez plus profond), ou simplement utiliser la fonction jQuery parseJSON:

var response = '{"result":true , "count":1}'; 
var parsedJSON = $.parseJSON(response);

OU

Vous pouvez utiliser ce code ci-dessous.

var response = '{"result":true , "count":1}';
var jsonObject = JSON.parse(response);

Et vous pouvez accéder aux champs en utilisant jsonObject.result et jsonObject.count.


24
2018-06-06 03:51



La manière la plus simple d'utiliser parse() méthode:

var response = '{"a":true,"b":1}';
var JsonObject= JSON.parse(response);

Voici un exemple de comment obtenir des valeurs:

var myResponseResult = JsonObject.a;
var myResponseCount = JsonObject.b;

23
2018-06-04 14:44



Sans utiliser une bibliothèque, vous pouvez utiliser eval - La seule fois que vous devriez utiliser. Il est cependant plus sûr d'utiliser une bibliothèque.

par exemple...

var response = '{"result":true , "count":1}';

var parsedJSON = eval('('+response+')');

var result=parsedJSON.result;
var count=parsedJSON.count;

alert('result:'+result+' count:'+count);

19
2018-02-08 16:45



JSON.parse () convertit toute chaîne JSON passée dans la fonction à un objet JSON.

Pour mieux comprendre, appuyez sur F12 pour ouvrir l'élément Inspecter de votre navigateur et accédez à la console pour écrire les commandes suivantes:

var response = '{"result":true,"count":1}'; // Sample JSON object (string form)
JSON.parse(response); // Converts passed string to a JSON object.

Maintenant, lancez la commande:

console.log(JSON.parse(response));

Vous obtiendrez une sortie en tant que Object {result: true, count: 1}.

Pour utiliser cet objet, vous pouvez l'affecter à la variable, disons obj:

var obj = JSON.parse(response);

Maintenant 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

console.log(obj.result);

19
2018-02-18 10:08