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
}
}
Nach dem Login kopieren
The Ziel ist es, diesen JSON in ein Monster-Array zu entmarshalieren Objekte.
type Monster struct {
MonsterId int32
Level int32
SkillLevel int32
AimerId int32
}
Nach dem Login kopieren
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
}
Nach dem Login kopieren
-
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)
}
Nach dem Login kopieren
- 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"`
}
Nach dem Login kopieren
-
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)
Nach dem Login kopieren
-
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)
}
Nach dem Login kopieren
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!