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.
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