Unmarshaling dynamischer JSON-Schlüssel mit Viper- und Go-Strukturen
In Go kann der Umgang mit JSON-Daten mit dynamischen Schlüsseln eine Herausforderung sein. Wenn Sie beispielsweise über eine JSON-Konfigurationsdatei mit einem Objekt verfügen, das Schlüssel mit unterschiedlichen Namen enthält, wie können Sie diese Daten dann in eine Go-Struktur entpacken?
Nehmen wir die folgende JSON-Konfigurationsdatei als Beispiel:
{ "things" :{ "123abc" :{ "key1": "anything", "key2" : "more" }, "456xyz" :{ "key1": "anything2", "key2" : "more2" }, "blah" :{ "key1": "anything3", "key2" : "more3" } } }
Um dieses Problem zu beheben, können Sie eine Karte verwenden, um die dynamischen Schlüssel darzustellen, wie in dieser aktualisierten Go-Struktur gezeigt:
type X struct { Things map[string]Thing } type Thing struct { Key1 string Key2 string }
Sobald Sie die Struktur definiert haben, können Sie die entmarshalieren JSON-Daten wie diese:
var x X if err := json.Unmarshal(data, &x); err != nil { // handle error }
Wenn der Name der Objektschlüssel ein Feld der „Thing“-Struktur sein soll, können Sie eine Schleife hinzufügen, um ihn nach dem Unmarshaling zuzuweisen:
// Fix the name field after unmarshal for k, t := range x.Things { t.Name = k x.Things[k] = t }
Alternativ kann ein benutzerdefinierter JSON-Decoder verwendet werden, um die dynamischen Schlüssel zu verarbeiten, indem die Methode „Decode“ überschrieben wird. Weitere Informationen zu diesem Ansatz finden Sie in der offiziellen Go-Dokumentation.
Mit diesen Techniken können Sie dynamische JSON-Schlüssel effektiv in Go-Strukturen entmarshalieren und so mit komplexen Konfigurationsdateien und Datenstrukturen arbeiten.
Das obige ist der detaillierte Inhalt vonWie entmarshalieren Sie dynamische JSON-Schlüssel mit Viper- und Go-Strukturen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!