Heim > Backend-Entwicklung > Golang > Wie entmarshaliere ich dynamische Viper- oder JSON-Schlüssel als Strukturfelder in Go?

Wie entmarshaliere ich dynamische Viper- oder JSON-Schlüssel als Strukturfelder in Go?

Barbara Streisand
Freigeben: 2024-11-20 15:30:13
Original
482 Leute haben es durchsucht

How to Unmarshal Dynamic Viper or JSON Keys as Struct Fields in Go?

Dynamische Viper- oder JSON-Schlüssel als Strukturfelder in Go entmarshaling

In Go kann die Handhabung dynamischer JSON-Schlüssel innerhalb von Strukturfeldern eine Herausforderung sein. Lassen Sie uns näher darauf eingehen und mithilfe der Viper-Bibliothek eine umfassende Lösung bereitstellen.

Problemstellung

Betrachten Sie eine JSON-Konfigurationsdatei mit dynamischen Schlüsseln:

{
  "things" :{
    "123abc" :{
      "key1": "anything",
      "key2" : "more"
    },
    "456xyz" :{
      "key1": "anything2",
      "key2" : "more2"
    },
    "blah" :{
      "key1": "anything3",
      "key2" : "more3"
    }
  }
}
Nach dem Login kopieren

Um diese Konfiguration in eine Struktur zu analysieren, könnte man Folgendes definieren:

type Thing struct {
  Name string  `?????`
  Key1 string  `json:"key2"`
  Key2 string  `json:"key2"`
}
Nach dem Login kopieren

Es stellt sich jedoch die Frage: Wie können Sie die dynamischen Schlüssel als Strukturfeldnamen entmarshalieren?

Lösung

Um mit dynamischen Schlüsseln umzugehen, sollten Sie die Verwendung einer Karte in Betracht ziehen:

type X struct {
    Things map[string]Thing
}

type Thing struct {
    Key1 string
    Key2 string
}
Nach dem Login kopieren

Unmarshalieren wie:

var x X
if err := json.Unmarshal(data, &x); err != nil {
    // handle error
}
Nach dem Login kopieren

Spielplatzbeispiel

Wenn der Schlüssel ein Mitglied der Struktur sein muss, können Sie ihn nach dem Unmarshalling mit einer Schleife hinzufügen:

type Thing struct {
    Name string `json:"-"` // Add the field
    Key1 string
    Key2 string
}

...

// Fix the name field after unmarshal
for k, t := range x.Things {
    t.Name = k
    x.Things[k] = t
}
Nach dem Login kopieren

Playground-Beispiel

Mit diesen Techniken können Sie dynamische JSON-Schlüssel effektiv in Strukturfelder in Go entmarshalieren, selbst wenn Sie Bibliotheken wie Viper verwenden.

Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich dynamische Viper- oder JSON-Schlüssel als Strukturfelder 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