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
Mary-Kate OlsenOriginal
2024-12-01 19:25:20316Durchsuche

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

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
}

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
}

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
}

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!

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