„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie entmarshaliere ich verschachteltes JSON in ein Array von Objekten in Go?

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

Veröffentlicht am 21.12.2024
Durchsuche:694

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

Unmarshaling verschachtelter JSON in Array von Objekten 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
   }
}

Das Ziel besteht darin, diesen JSON in ein Array von Monster-Objekten zu entmarshalieren.

type Monster struct {
    MonsterId  int32
    Level      int32
    SkillLevel int32
    AimerId    int32
}

Lösung

Um dies zu erreichen, folgen Sie diesen Schritten:

  1. Definieren Sie MonsterCollection: Erstellen Sie einen MonsterCollection-Typ, um eine Karte von Monster zu speichern Objekte mit Zeichenfolgenschlüsseln.
type MonsterCollection struct {
    Pool map[string]Monster
}
  1. Implementieren Sie die FromJson-Methode: 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)
}
  • Mit var data *map[string]Monster vermeidet die Verwendung von interface{} und stellt so sicher, dass die resultierende Karte den gewünschten Typ hat.
  • Die Übergabe von Daten als Zeiger stellt dies sicher Die beim Unmarshaling vorgenommenen Änderungen werden im Pool-Feld der MonsterCollection widergespiegelt.
  1. Korrekter Schlüssel Geben Sie Pool ein: Ändern Sie den Schlüsseltyp der Pool-Zuordnung in „String“, damit er mit den Schlüsseln in den JSON-Daten übereinstimmt.
  2. Verwenden Sie Struktur-Tags: 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. Call FromJson: Rufen Sie die FromJson-Methode mit der JSON-Zeichenfolge auf, um die Daten in die MonsterCollection zu entmarshalieren.
mc := new(MonsterCollection)
err := mc.FromJson(jsonStr)
  1. Auf Fehler prüfen: Behandeln Sie alle von FromJson zurückgegebenen Fehler zu Debugging-Zwecken.
  2. Greifen Sie auf die Objekte zu : Verwenden Sie das Pool-Feld der MonsterCollection, um auf die einzelnen Monster-Objekte zuzugreifen.
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 entmarshalieren.

Neuestes Tutorial Mehr>

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