Unmarshalling dynamischer JSON-Schlüssel in Strukturfeldern in Go
Dynamische JSON-Schlüssel können eine Herausforderung darstellen, wenn sie in Strukturen mit statischen Feldnamen entmarshallt werden. Betrachten Sie die folgende JSON-Konfigurationsdatei:
{ "things" :{ "123abc" :{ "key1": "anything", "key2" : "more" }, "456xyz" :{ "key1": "anything2", "key2" : "more2" }, "blah" :{ "key1": "anything3", "key2" : "more3" } } }
Um diesen JSON in einer Go-Struktur darzustellen, können Sie eine Karte anstelle statischer Feldnamen verwenden:
type X struct { Things map[string]Thing } type Thing struct { Key1 string Key2 string }
Unmarshalieren Sie dann den JSON Verwenden der json.Unmarshal-Funktion:
var x X if err := json.Unmarshal(data, &x); err != nil { // handle error }
Bei diesem Ansatz werden die dynamischen Schlüssel zu den Schlüsseln der Karte, sodass Sie bei Bedarf auf die Werte zugreifen können.
Wenn jedoch der Schlüssel Muss ein Mitglied der Thing-Struktur sein, können Sie eine Schleife schreiben, um den Schlüssel nach dem Unmarshalling hinzuzufü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 }
Mit dieser Methode können Sie sowohl den Schlüssel als Feld als auch die dynamischen Werte verwenden.
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich dynamische JSON-Schlüssel in Strukturfelder in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!