web-dev-qa-db-fra.com

Réponse JSON analysant en Javascript pour obtenir une paire clé / valeur

Duplicate possible:
J'ai une structure de données imbriquée/comment puis-je accéder à une valeur spécifique?

Comment puis-je obtenir le nom et la valeur de chaque objet en Javascript uniquement?

62
Parekh Shah

Il existe deux manières d'accéder aux propriétés des objets:

var obj = {a: 'foo', b: 'bar'};

obj.a //foo
obj['b'] //bar

Ou, si vous avez besoin de le faire dynamiquement:

var key = 'b';
obj[key] //bar

Si vous ne l'avez pas déjà sous forme d'objet, vous aurez besoin de le convertir .

Pour un exemple plus complexe, supposons que vous disposiez d'un tableau d'objets représentant les utilisateurs:

var users = [{name: 'Corbin', age: 20, favoriteFoods: ['ice cream', 'pizza']},
             {name: 'John', age: 25, favoriteFoods: ['ice cream', 'skittle']}];

Pour accéder à la propriété age du deuxième utilisateur, vous utiliseriez users[1].age. Pour accéder au deuxième "favori" du premier utilisateur, vous utiliseriez users[0].favoriteFoods[2].

Autre exemple: obj[2].key[3]["some key"]

Cela accèderait au 3ème élément d'un tableau nommé 2. Ensuite, il accèderait à 'clé' dans ce tableau, accédait au troisième élément de celui-ci, puis accédait au nom de propriété some key.


Comme Amadan l'a noté, il serait peut-être intéressant de discuter de la manière de passer en revue différentes structures.

Pour boucler sur un tableau, vous pouvez utiliser une simple boucle for:

var arr = ['a', 'b', 'c'],
    i;
for (i = 0; i < arr.length; ++i) {
    console.log(arr[i]);
}

Boucler sur un objet est un peu plus compliqué. Si vous êtes absolument certain que l'objet est un objet brut, vous pouvez utiliser une boucle simple for (x in obj) { }, mais il est beaucoup plus sûr d'ajouter une vérification hasOwnProperty . Cela est nécessaire dans les cas où vous ne pouvez pas vérifier que l'objet n'a pas de propriétés héritées. (Cela corrige également un peu le code à l’avenir.)

var user = {name: 'Corbin', age: 20, location: 'USA'},
    key;

for (key in user) {
    if (user.hasOwnProperty(key)) {
        console.log(key + " = " + user[key]);
    }
}    

(Notez que j'ai supposé que toute implémentation de JS que vous utilisez avait console.log. Sinon, vous pouvez utiliser alert ou une sorte de manipulation DOM à la place.)

126
Corbin

Essayez l’analyseur JSON de Douglas Crockford à github . Vous pouvez ensuite simplement créer un objet JSON à partir de votre variable String, comme indiqué ci-dessous:

var JSONText = '{"c":{"a":[{"name":"cable - black","value":2},{"name":"case","value":2}]},"o":{"v":[{"name":"over the ear headphones - white/purple","value":1}]},"l":{"e":[{"name":"lens cleaner","value":1}]},"h":{"d":[{"name":"hdmi cable","value":1},{"name":"hdtv essentials (hdtv cable setup)","value":1},{"name":"hd dvd \u0026 blue-ray disc lens cleaner","value":1}]}'

var JSONObject = JSON.parse(JSONText);
var c = JSONObject["c"];
var o = JSONObject["o"];
15
Sachin Sharma

Ok, voici le code JS:

var data = JSON.parse('{"c":{"a":{"name":"cable - black","value":2}}}')

for (var event in data) {
    var dataCopy = data[event];
    for (data in dataCopy) {
        var mainData = dataCopy[data];
        for (key in mainData) {
            if (key.match(/name|value/)) {
                alert('key : ' + key + ':: value : ' + mainData[key])
            }
        }
    }
}​

FIDDLE ICI

7
palaѕн
var yourobj={
"c":{
    "a":[{"name":"cable - black","value":2},{"name":"case","value":2}]
    },
"o":{
    "v":[{"name":"over the ear headphones - white/purple","value":1}]
},
"l":{
    "e":[{"name":"lens cleaner","value":1}]
},
"h":{
    "d":[{"name":"hdmi cable","value":1},
         {"name":"hdtv essentials (hdtv cable setup)","value":1},
         {"name":"hd dvd \u0026 blue-ray disc lens cleaner","value":1}]
}}
  • tout d'abord c'est une bonne idée de s'organiser
  • la référence de niveau supérieur doit être un nom plus pratique, autre que a..v ... etc
  • dans o.v, o.i.e pas besoin du tableau [] car il s'agit d'une entrée json

ma solution

var obj = [];
for(n1 in yourjson)
    for(n1_1 in yourjson[n])
        for(n1_2 in yourjson[n][n1_1])
            obj[n1_2[name]] = n1_2[value];

code approuvé

for(n1 in yourobj){
    for(n1_1 in yourobj[n1]){
    for(n1_2 in yourobj[n1][n1_1]){
            for(n1_3 in yourobj[n1][n1_1][n1_2]){
      obj[yourobj[n1][n1_1][n1_2].name]=yourobj[n1][n1_1][n1_2].value;
            }
    }
 }
}
console.log(obj);

résultat

* Vous devriez utiliser distinction accessoiriser lorsque vous utilisez la méthode [] ou la notation par points

proove

5
Rami Jamleh