parsing récupérer - Parse JSON en JavaScript?




données to (14)

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.

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?


Je pensais que JSON.parse(myObject) fonctionnerait. Mais selon les navigateurs, il peut être utile d'utiliser eval('('+myObject+')') . Le seul problème que je peux recommander est la liste multi-niveau dans JSON.


Un moyen facile de le faire:

var data = '{"result":true,"count":1}';
var json = eval("[" +data+ "]")[0]; // ;)

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

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

Si vous utilisez jQuery, c'est simple:

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

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 .


Si vous utilisez Dojo Toolkit :

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

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.


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;

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.


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

ECMAScript5 (la version sur Javascript) pour travailler avec des tableaux.

forEach - Itère à travers chaque élément du tableau et fait tout ce dont vous avez besoin avec chaque élément.

['C', 'D', 'E'].forEach(function(element, index) {
  console.log(element + " is the #" + (index+1) + " in musical scale");
});

// Output
// C is the #1 in musical scale
// D is the #2 in musical scale
// E is the #3 in musical scale

Au cas où, plus intéressé par le fonctionnement sur le tableau en utilisant une fonctionnalité intégrée.

map - Il crée un nouveau tableau avec le résultat de la fonction de rappel. Cette méthode est utile si vous avez besoin de formater les éléments de votre tableau.

// Let's upper case the items in the array
['bob', 'joe', 'jen'].map(function(elem) {
  return elem.toUpperCase();
});

// Output: ['BOB', 'JOE', 'JEN']

réduire - Comme son nom l'indique, il réduit le tableau à une valeur unique en appelant la fonction donnée transmettant l'élément currenct et le résultat de l'exécution précédente.

[1,2,3,4].reduce(function(previous, current) {
  return previous + current;
});
// Output: 10
// 1st iteration: previous=1, current=2 => result=3
// 2nd iteration: previous=3, current=3 => result=6
// 3rd iteration: previous=6, current=4 => result=10

every - Renvoie true ou false si tous les éléments du tableau réussissent le test dans la fonction de rappel.

// Check if everybody has 18 years old of more.
var ages = [30, 43, 18, 5];  
ages.every(function(elem) {  
  return elem >= 18;
});

// Output: false

filter - Très similaire à tous sauf que filter retourne un tableau avec les éléments qui retournent true à la fonction donnée.

// Finding the even numbers
[1,2,3,4,5,6].filter(function(elem){
  return (elem % 2 == 0)
});

// Output: [2,4,6]

J'espère que cela vous sera utile.







javascript json parsing