Zugriff auf verschachtelte JSON-Arrays in Go
In Go treten beim Zugriff auf verschachtelte JSON-Arrays nach dem Unmarshalling Herausforderungen auf. Beim Versuch, ein Element aus dem Array „objects“ in einer Antwort abzurufen, kann der Fehler „Typschnittstelle {} unterstützt keine Indizierung“ auftreten.
Verstehen des Problems
Standardmäßig stellen JSON-Module in Go Arrays als []Interface{}-Slices und Wörterbücher als Map[string]Interface{}-Maps dar. Daher schlägt beim Dekodieren in eine Interface{}-Variable der direkte Zugriff auf verschachtelte Elemente mithilfe der Indizierung fehl.
Lösung: Typ Assertion
Ein Ansatz zur Behebung dieses Problems ist durch Typzusicherung. Dazu gehört die Konvertierung der Variablen interface{} in den zugrunde liegenden konkreten Typ. So extrahieren Sie beispielsweise die ITEM_ID aus dem ersten Objekt im Array „objects“:
<code class="go">objects := result["objects"].([]interface{}) first := objects[0].(map[string]interface{}) fmt.Println(first["ITEM_ID"])</code>
Typzusicherung mit Fehlerprüfung
Beim Durchführen von Typzusicherungen ist dies der Fall Es ist wichtig, eine Fehlerprüfung zu integrieren, um fehlerhafte Konvertierungen zu bewältigen. Beispiel:
<code class="go">objects, ok := result["objects"].([]interface{}) if !ok { // Handle type conversion error }</code>
Dekodierung in eine Struktur
Eine alternative Lösung, die für JSON mit einem bekannten Format empfohlen wird, besteht darin, direkt in eine benutzerdefinierte Struktur zu dekodieren. Definieren Sie eine Struktur, die der JSON-Struktur entspricht, und dekodieren Sie sie:
<code class="go">type Result struct { Query string Count int Objects []struct { ItemId string ProdClassId string Available int } }</code>
Dadurch können Sie direkt auf Daten zugreifen, sodass keine Typzusicherungen erforderlich sind:
<code class="go">var result Result json.Unmarshal(payload, &result) fmt.Println(result.Objects[0].ItemId)</code>
Das obige ist der detaillierte Inhalt vonWie greife ich in Go auf verschachtelte JSON-Arrays zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!