Wie kann ich auf verschachtelte Objekte, Arrays oder JSON zugreifen und diese verarbeiten?
Lesezeit: 4 Minuten
Felix Klinge
Ich habe eine verschachtelte Datenstruktur, die Objekte und Arrays enthält. Wie kann ich die Informationen extrahieren, dh auf einen bestimmten oder mehrere Werte (oder Schlüssel) zugreifen?
Zum Beispiel:
var data = {
code: 42,
items: [{
id: 1,
name: 'foo'
}, {
id: 2,
name: 'bar'
}]
};
Wie konnte ich auf die zugreifen name des zweiten Artikels in items?
@Marcel: Es muss gelesen werden als “Ich habe eine verschachtelte Datenstruktur oder JSON, wie kann ich auf einen bestimmten Wert zugreifen?”. ich kennen den Unterschied, aber viele Leute tun es nicht und suchen möglicherweise eher nach “JSON” als nach “Objekt”. Viele Fragen haben tatsächlich die Form “wie kann ich in diesem JSON auf X zugreifen”. Der einzige Ort, an dem ich JSON in meiner Antwort erwähne, ist, wo ich erkläre, was es ist. Wenn Sie einen Vorschlag haben, wie Sie dies besser kommunizieren können, bin ich ganz Ohr.
– Felix Klinge
2. März 2013 um 0:46 Uhr
mögliches Duplikat von JSON find in JavaScript
– Travis J
12. Juni 2013 um 22:14 Uhr
Diese Antwort hier hat mir geholfen, das Problem für den Zugriff auf verschachtelte Objekte sehr schön und Vanilla zu lösen: stackoverflow.com/questions/6491463/… Erlaubt zum Beispiel zu schreiben: someObject.access(“firstPart[2].someOtherPart.myId”)
– Austausch
17. August 2020 um 15:28 Uhr
Sie können auf diese Weise darauf zugreifen
data.items[1].name
oder
data["items"][1]["name"]
Beide Wege sind gleich.
Das ist meine Lieblingsantwort. Sie könnten auch ein Beispiel für eine for-Schleife nur für bestimmte verschachtelte Daten hinzufügen, z Object.keys(data["items"]).forEach(function(key) { console.log(data["items"][key].id); console.log(data["items"][key].name); });
– Silberner Surfer
26. August 2019 um 13:01 Uhr
holografisches Prinzip
Falls Sie versuchen, auf eine zuzugreifen item aus der Beispielstruktur von id oder nameohne seine Position im Array zu kennen, wäre der einfachste Weg, dies zu tun, zu verwenden unterstrich.js Bücherei:
Aus meiner Erfahrung verwenden Sie stattdessen Funktionen höherer Ordnung for oder for..in Schleifen führen zu Code, über den man leichter nachdenken kann und der daher besser wartbar ist.
Nur meine 2 Cent.
Gemeinschaft
Manchmal kann es wünschenswert sein, auf ein verschachteltes Objekt mit einer Zeichenfolge zuzugreifen. Der einfache Ansatz ist zum Beispiel die erste Ebene
var obj = { hello: "world" };
var key = "hello";
alert(obj[key]);//world
Bei komplexen json ist dies jedoch häufig nicht der Fall. Je komplexer json wird, desto komplexer werden auch die Ansätze zum Auffinden von Werten innerhalb von json. Ein rekursiver Ansatz zum Navigieren im json ist am besten, und wie diese Rekursion genutzt wird, hängt von der Art der Daten ab, nach denen gesucht wird. Wenn es sich um bedingte Anweisungen handelt, kann eine JSON-Suche ein gutes Werkzeug sein.
Wenn die Eigenschaft, auf die zugegriffen wird, bereits bekannt ist, aber der Pfad komplex ist, z. B. in diesem Objekt
Und Sie wissen, dass Sie das erste Ergebnis des Arrays im Objekt erhalten möchten, das Sie vielleicht verwenden möchten
var moe = obj["arr[0].name"];
Dies führt jedoch zu einer Ausnahme, da es keine Eigenschaft des Objekts mit diesem Namen gibt. Die Lösung, um dies verwenden zu können, wäre, den Baumaspekt des Objekts zu glätten. Dies kann rekursiv erfolgen.
Wenn Sie den genauen Namen nicht vorher wissen oder ein Benutzer derjenige ist, der den Namen für Sie bereitstellt. Dann ist ein dynamisches Durchsuchen der Datenstruktur erforderlich. Einige haben hier vorgeschlagen, dass die Suche mit a durchgeführt werden kann for Schleife, aber es gibt eine sehr einfache Möglichkeit, einen Pfad mit zu durchlaufen Array.reduce.
Der Pfad ist eine Art zu sagen: Nimm zuerst das Objekt mit dem Schlüssel items, was zufällig ein Array ist. Dann nimm die 1-st Element (0 Index-Arrays). Nehmen Sie zuletzt das Objekt mit Schlüssel name in diesem Array-Element, das zufällig der String ist bar.
Wenn Sie einen sehr langen Pfad haben, können Sie sogar verwenden String.split um das alles einfacher zu machen –
@Marcel: Es muss gelesen werden als “Ich habe eine verschachtelte Datenstruktur oder JSON, wie kann ich auf einen bestimmten Wert zugreifen?”. ich kennen den Unterschied, aber viele Leute tun es nicht und suchen möglicherweise eher nach “JSON” als nach “Objekt”. Viele Fragen haben tatsächlich die Form “wie kann ich in diesem JSON auf X zugreifen”. Der einzige Ort, an dem ich JSON in meiner Antwort erwähne, ist, wo ich erkläre, was es ist. Wenn Sie einen Vorschlag haben, wie Sie dies besser kommunizieren können, bin ich ganz Ohr.
– Felix Klinge
2. März 2013 um 0:46 Uhr
mögliches Duplikat von JSON find in JavaScript
– Travis J
12. Juni 2013 um 22:14 Uhr
Diese Antwort hier hat mir geholfen, das Problem für den Zugriff auf verschachtelte Objekte sehr schön und Vanilla zu lösen: stackoverflow.com/questions/6491463/… Erlaubt zum Beispiel zu schreiben: someObject.access(“firstPart[2].someOtherPart.myId”)
– Austausch
17. August 2020 um 15:28 Uhr