„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie gehe ich mit verschachtelten Arrays beim Go JSON Unmarshalling um?

Wie gehe ich mit verschachtelten Arrays beim Go JSON Unmarshalling um?

Veröffentlicht am 08.11.2024
Durchsuche:248

How to Handle Nested Arrays in Go JSON Unmarshalling?

Golang JSON: Umgang mit verschachtelten Arrays mit Unmarshalling

Wenn Sie in Go nach dem Unmarshalling mit verschachtelten JSON-Arrays arbeiten, ist es wichtig, den Fehler zu verstehen „Typschnittstelle {} unterstützt keine Indizierung.“ Dieser Fehler tritt auf, wenn Sie versuchen, auf ein Element in einem JSON-Array zuzugreifen, das in einer Interface{}-Variablen gespeichert ist.

Um dieses Problem zu beheben, müssen Sie Typzusicherungen verwenden, um die Interface{}-Variable in die zu konvertieren zugrunde liegender Array-Typ.

Interface{} Darstellung im JSON-Modul

Das JSON-Modul stellt Arrays als []interface{} dar. Slices und Wörterbücher als Map[string]interface{}-Maps beim Decodieren in eine Interface{}-Variable.

Zugriff auf verschachtelte Elemente mit Typzusicherungen

Ohne Fehlerprüfung, Sie kann mit Typzusicherungen wie folgt im JSON-Array navigieren:

objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])

Es ist jedoch wichtig zu beachten, dass diese Typzusicherungen in Panik geraten können, wenn die Typen nicht übereinstimmen. Um dieses Problem zu vermeiden, können Sie das Formular mit zwei Rückgaben verwenden und auf den Fehler prüfen:

objects, ok := result["objects"].([]interface{})
if !ok {
    // Handle error here
}

Dekodierung in eine Struktur für verbesserten Zugriff

Wenn die JSON-Daten einem konsistenten Format folgen, besteht eine effizientere Lösung darin, sie in einen strukturierten Typ zu dekodieren. Zum Beispiel basierend auf den bereitgestellten Daten:

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"`
}

Durch die Dekodierung in diese Struktur können Sie mit result.Objects[0].ItemId direkt auf die Artikel-ID zugreifen. Dieser Ansatz macht Typzusicherungen überflüssig und bietet eine typsichere Methode für den Zugriff auf verschachtelte Elemente.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3