read - récupérer données json javascript




Parse JSON en JavaScript? (11)

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 result la valeur et count partir de cela?


Comme mentionné par de nombreux autres, la plupart des navigateurs prennent en charge JSON.parse et JSON.stringify .

Maintenant, je voudrais aussi ajouter que si vous utilisez AngularJS (que je recommande fortement), alors il fournit également la fonctionnalité dont vous avez besoin:

var myJson = '{"result": true, "count": 1}';
var obj = angular.fromJson(myJson);//equivalent to JSON.parse(myJson)
var backToJson = angular.toJson(obj);//equivalent to JSON.stringify(obj)

Je voulais juste ajouter les choses sur AngularJS pour fournir une autre option. Notez qu'AngularJS ne prend pas officiellement en charge Internet Explorer 8 (et les versions plus anciennes, d'ailleurs), bien que, par expérience, la plupart des choses semblent fonctionner plutôt bien.


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'assigner à 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);

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 la fonction eval . L'exemple suivant utilise la fonction eval :

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

// Output: x, 11

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


La plupart des navigateurs prennent en charge JSON.parse() , qui est défini dans ECMA-262 5th Edition (la spécification sur laquelle repose JavaScript). 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 existe une fonction $.parseJSON JSON.parse à JSON.parse si disponible ou une forme d' eval dans les anciens navigateurs. Cependant, ceci effectue des vérifications supplémentaires et inutiles qui sont également effectuées par JSON.parse , donc pour les meilleures performances JSON.parse , je vous recommande de l'utiliser comme ceci:

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

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


Sans utiliser une bibliothèque, vous pouvez utiliser eval - le seul moment 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);

Si tu veux

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

vous pouvez accéder aux éléments JSON par JsonObject avec (.) point:

JsonObject.result;
JsonObject.count;

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

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

Si vous utilisez Dojo Toolkit :

require(["dojo/json"], function(JSON){
    JSON.parse('{"hello":"world"}', true);
});

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, l'objet window.JSON standard est disponible quel que soit le navigateur utilisé par un client.


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


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







parsing