Heim  >  Artikel  >  Backend-Entwicklung  >  Wie entmarshaliere ich verschachteltes JSON in ein Array von Objekten in Go?

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

Barbara Streisand
Barbara StreisandOriginal
2024-11-25 10:59:14343Durchsuche

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

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:

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

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