Wie entmarshaliere ich verschachteltes JSON in ein Array von Objekten in Go?

Barbara Streisand
Freigeben: 2024-11-25 10:59:14
Original
342 Leute haben es durchsucht

How to Unmarshal Nested JSON into an Array of Objects in Go?

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:

  1. 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
  1. 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.
  1. 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.
  2. 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
  1. 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
  1. Auf Fehler prüfen:Behandeln Sie alle von FromJson zurückgegebenen Fehler zu Debugging-Zwecken.
  2. 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!

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