Unmarshaling Nested JSON in Array of Objects in Go
Problem
Berücksichtigen Sie die folgenden JSON-Daten:
{
"1001":{
"level":10,
"monster-id":1001,
"skill-level":1,
"aimer-id":301
},
"1002":{
"level":12,
"monster-id":1002,
"skill-level":1,
"aimer-id":302
},
"1003":{
"level":16,
"monster-id":1003,
"skill-level":2,
"aimer-id":303
}
}
The Ziel ist es, diesen JSON in ein Monster-Array zu entmarshalieren Objekte.
type Monster struct {
MonsterId int32
Level int32
SkillLevel int32
AimerId int32
}
Lösung
Um dies zu erreichen, folgen Sie diesen Schritten:
-
MonsterCollection definieren: Erstellen Sie einen MonsterCollection-Typ zum Halten eine Karte von Monsterobjekten mit Schnur Schlüssel.
type MonsterCollection struct {
Pool map[string]Monster
}
-
FromJson-Methode implementieren: Definieren Sie eine FromJson-Methode für den MonsterCollection-Typ, um das Unmarshaling zu handhaben.
func (mc *MonsterCollection) FromJson(jsonStr string) error {
var data *map[string]Monster
b := []byte(jsonStr)
return json.Unmarshal(b, &data)
}
- Die Verwendung von Var-Daten *map[string]Monster vermeidet die Verwendung von interface{} und stellt dies sicher Die resultierende Karte hat den gewünschten Typ.
- Durch die Übergabe von Daten als Zeiger wird sichergestellt, dass die beim Unmarshaling vorgenommenen Änderungen im Pool-Feld der MonsterCollection widergespiegelt werden.
-
Richtig Schlüsseltyp im Pool: Ändern Sie den Schlüsseltyp der Pool-Zuordnung in „String“, damit er mit den Schlüsseln im JSON übereinstimmt Daten.
-
Struktur-Tags verwenden: Fügen Sie JSON-Struktur-Tags zur Monster-Struktur hinzu, um die Feldnamen in den JSON-Daten anzugeben.
type Monster struct {
MonsterId int32 `json:"monster-id"`
Level int32 `json:"level"`
SkillLevel int32 `json:"skill-level"`
AimerId int32 `json:"aimer-id"`
}
-
FromJson aufrufen: Rufen Sie die FromJson-Methode mit der JSON-Zeichenfolge auf, um die Daten in zu entmarshalieren MonsterCollection.
mc := new(MonsterCollection)
err := mc.FromJson(jsonStr)
-
Auf Fehler prüfen:Behandeln Sie alle von FromJson zurückgegebenen Fehler zu Debugging-Zwecken.
-
Zugriff auf die Objekte: Verwenden Sie das Pool-Feld der MonsterCollection, um auf das einzelne Monster zuzugreifen Objekte.
for id, monster := range mc.Pool {
fmt.Println(id, monster)
}
Indem Sie diese Schritte befolgen, können Sie die verschachtelten JSON-Daten erfolgreich in ein Array von Monster-Objekten in Go entpacken.
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich verschachteltes JSON in ein Array von Objekten in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme: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