Heim > Backend-Entwicklung > Golang > Wie entmarshaliere ich JSON mit dynamischen Schlüsseln in Go?

Wie entmarshaliere ich JSON mit dynamischen Schlüsseln in Go?

Mary-Kate Olsen
Freigeben: 2024-12-01 19:25:20
Original
318 Leute haben es durchsucht

How to Unmarshal JSON with Dynamic Keys in Go?

Dynamische Schlüsselverarbeitung im Viper/JSON-Unmarshaling

Beim Umgang mit JSON-Daten, die von einem vorgegebenen Format abweichen, kann das Unmarshaling in Go eine Herausforderung darstellen . Stellen Sie sich eine JSON-Konfigurationsdatei mit dynamischen Schlüsseln vor, wie zum Beispiel die folgende:

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

Um diese Daten in eine Go-Struktur mit dynamischen Schlüsseln zu entpacken, besteht ein Ansatz darin, eine Karte zu verwenden:

type X struct {
    Things map[string]Thing
}

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

Durch die Verwendung von „map[string]Thing“ kann die resultierende Struktur eine beliebige Anzahl dynamischer Schlüssel verarbeiten. Entmarshallen Sie die Daten mit:

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

Dieser Ansatz ermöglicht ein einfaches Unmarshalling dynamischer Schlüssel sowohl in JSON als auch in Viper (mithilfe von viper.Get("things"), um ein Array von Thing-Werten zu erhalten).

Wenn der Schlüssel selbst jedoch Mitglied der Struktur sein muss, kann eine Post-Unmarshalling-Schleife verwendet werden, um ihn zu aktualisieren Felder:

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

Dadurch kann der Schlüssel in die Struktur integriert werden, während die ursprüngliche dynamische Natur der JSON-Daten erhalten bleibt.

Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich JSON mit dynamischen Schlüsseln 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