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!