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" } } }
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"` }
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 }
Unmarshalieren wie:
var x X if err := json.Unmarshal(data, &x); err != nil { // handle error }
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 }
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!