Wie greife ich nach dem Unmarshalling auf verschachtelte JSON-Arrays in Golang zu?

Mary-Kate Olsen
Freigeben: 2024-11-04 18:54:02
Original
425 Leute haben es durchsucht

How to Access Nested JSON Arrays in Golang After Unmarshalling?

Zugriff auf ein verschachteltes JSON-Array in Golang nach dem Unmarshalling

Beim Arbeiten mit JSON-Antworten in Golang kann es zu Schwierigkeiten beim Zugriff auf Elemente eines verschachtelten JSON kommen Array. Dies kann passieren, wenn versucht wird, auf ein bestimmtes Element im Array „objects“ zuzugreifen, was zu einem Fehler wie „Typschnittstelle {} unterstützt keine Indizierung“ führt.

Fehlerursache

Der Fehler entsteht, weil Schnittstellenvariablen in Go keine Indizierung unterstützen. Wenn Sie die JSON-Nutzlast in eine Schnittstellenvariable dekodieren, stellt das JSON-Modul Arrays als []interface{}-Slices und Wörterbücher als Map[string]interface{}-Maps dar.

Lösung 1: Verwenden von Typzusicherungen

Um auf ein bestimmtes Element innerhalb des Arrays „objects“ zuzugreifen, können Sie Typzusicherungen verwenden, um die Schnittstellenvariable in einen konkreten Typ zu konvertieren. Dieser Ansatz erfordert jedoch eine Fehlerprüfung, um Fälle zu behandeln, in denen die Typzusicherung fehlschlägt.

<code class="go">objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])</code>
Nach dem Login kopieren

Lösung 2: Dekodierung in eine Struktur

Wenn die JSON-Nutzlast eine hat Obwohl es sich um ein bekanntes Format handelt, besteht eine robustere Lösung darin, es direkt in eine benutzerdefinierte Struktur zu dekodieren. Auf diese Weise können Sie die erwartete Struktur definieren, wodurch Typzusicherungen und Fehlerbehandlung überflüssig werden.

<code class="go">type Result struct {
    Query   string `json:"query"`
    Count   int    `json:"count"`
    Objects []struct {
        ItemId      string `json:"ITEM_ID"`
        ProdClassId string `json:"PROD_CLASS_ID"`
        Available   int    `json:"AVAILABLE"`
    } `json:"objects"`
}

var result Result
if err := json.Unmarshal(payload, &result); err != nil {
    panic(err)
}
fmt.Println(result.Objects[0].ItemId)</code>
Nach dem Login kopieren

Durch Auswahl der geeigneten Lösung basierend auf dem spezifischen Anwendungsfall können Sie anschließend nahtlos auf verschachtelte JSON-Arrays in Golang zugreifen Entmarshalling.

Das obige ist der detaillierte Inhalt vonWie greife ich nach dem Unmarshalling auf verschachtelte JSON-Arrays in Golang zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage