2016-11-10 7 views
1

Ich versuche, die Schlüssel und Werte meiner verschachtelte Array wie folgt zugreifen:Wie verschachtelte JSON Objektschlüssel zugreifen und Werte

var obj = $.getJSON("mydata.json", function() { 
    console.log("load success"); 
}); 

Object.keys(obj[2].type).forEach(function(key) { 
    console.log(key, obj[key]); 
}); 

Aber ich einen Fehler.

Hier ist die Struktur der JSON-Datei:

{ 
"nodes": [ 
    { 
     "nd": "nd1", 
     "cat": "cat1" 
    } 
], 
"links": [ 
    { 
     "id": 100 
    } 
], 
"types": [ 
      { 
       "type": "one", 
       "image": "image001" 
      }, 
      { 
       "type": "two", 
       "image": "image002" 
      }, 
      { 
       "type": "three", 
       "image": "image003" 
      } 
     ] 

}

Mein Ziel ist es, eine Liste von Werten zu erhalten:

eins zwei drei

+0

Welche Fehler bekommen Sie? –

+0

'var vals = obj.types.map ((x) => x.image;});' – sed

+0

Es gibt keinen Schlüssel 2 für das Objekt – Dimitri

Antwort

1

So ähnlich?

Sie müssen zunächst Zugang zu object.types Attribut, dann auf sie iterieren jede Art abzurufen.

var object = { 
 
    "nodes": [{ 
 
    "nd": "nd1", 
 
    "cat": "cat1" 
 
    }], 
 
    "links": [{ 
 
    "id": 100 
 
    }], 
 
    "types": [{ 
 
    "type": "one", 
 
    "image": "image001" 
 
    }, { 
 
    "type": "two", 
 
    "image": "image002" 
 
    }, { 
 
    "type": "three", 
 
    "image": "image003" 
 
    }] 
 
}; 
 

 

 
function parseJson(object){ 
 
    object.types.forEach(function(key) { 
 
     console.log(key.type); 
 
    }); 
 
} 
 

 
parseJson(object);

--- Update anwer Frage in Kommentar ---

Sie den Code in eine Funktion einschließen könnte, und es nennen, wenn Sie Ihre json laden:

$.getJSON("mydata.json", function(data) { 
    parseJson(data); 
}); 
+0

dies funktioniert, aber wie wäre es Last aus einer externen Datei. Wie mache ich das mit dem 'getJSON' Befehl? – passion

1

Object.keys(obj[2].type) nicht wirklich Sinn hier machen. Wenn Sie nicht über die Eigenschaften eines Objekts iterieren, greifen Sie in einer Gruppe von Objekten auf dieselbe Eigenschaft zu. Dies ist, was map tut.

var types = obj.types.map(x => x.type); 
+0

ist nicht 'Karte (x => x.type)' eine Typoskript Syntax? –

+0

@VitaliiStrimbanu: Wahrscheinlich das auch, aber es ist auch EcmaScript 6. –

0

Sie können es mit diesem Code tun:

var obj = { 
 
"nodes": [ 
 
    { 
 
     "nd": "nd1", 
 
     "cat": "cat1" 
 
    } 
 
], 
 
"links": [ 
 
    { 
 
     "id": 100 
 
    } 
 
], 
 
"types": [ 
 
      { 
 
       "type": "one", 
 
       "image": "image001" 
 
      }, 
 
      { 
 
       "type": "two", 
 
       "image": "image002" 
 
      }, 
 
      { 
 
       "type": "three", 
 
       "image": "image003" 
 
      } 
 
     ] 
 
}; 
 

 
Object.keys(obj["types"]).forEach(function(key) { 
 
    console.log(obj["types"][key].image); 
 
});

1

$ .getJSON gibt ein Versprechen, weil es asynchron ist, aber Sie können Ihre Variable in Ihrer Callback-Set:

var obj; 
$.getJSON("mydata.json", function(data) { 
    obj = data; 
    Object.keys(obj[2].type).forEach(function(key) { 
     console.log(key, obj[key]); 
    }); 
}); 

link to documentation

1

sollten Sie den Fehler schreiben, die Sie bekommen, aber ich kann Ihnen sagen, dass das Problem, dass Ihr Ausgangscode ausgeführt, bevor das JSON-Objekt geladen wurde. Try this:

$.getJSON("mydata.json", function(obj) { 
    console.log("load success"); 
    Object.keys(obj[2].type).forEach(function(key) { 
     console.log(key, obj[key]); 
    }); 
}); 
0

hier eine funktionelle Art und Weise ist es in js zu tun:

var types = $.getJSON("mydata.json").done(function(response) { 
     return Object.keys(data["types"]).map(function(element){ 
      return element.type; 
     }).join(' '); 
    });    

    console.log(types); 
Verwandte Themen