Heim >Backend-Entwicklung >Golang >Wie kann ich JSON-Daten in Go dynamisch in generische Typen entmarshalieren?
Wenn Sie in Go vor der Herausforderung stehen, JSON-Daten in einer Schnittstelle zu entmarshaling{}, ist es wichtig zu verstehen, wie das dynamisch geschieht Behandeln Sie verschiedene Datentypen basierend auf bestimmten Schlüsseln. Dieser Artikel befasst sich mit diesem Problem und bietet eine Lösung zum Unmarshalieren von JSON in eine generische Schnittstelle{} in Go.
Stellen Sie sich ein Szenario vor, in dem wir einen Typ namens „Message“ mit einer Struktur haben, die Folgendes enthält ein Cmd-Feld (String) und ein Datenfeld (Interface{}). Wir haben auch einen verschachtelten Typ „CreateMessage“, der eine bestimmte Datenstruktur definiert. Beim Unmarshaling von JSON-Daten wie „{“cmd“: „create“, „data“:{“conf“:{“a“:1}, „info“:{“b“:2}}}‘ stoßen wir auf Ein Problem, bei dem das Datenfeld nicht ordnungsgemäß in den entsprechenden CreateMessage-Typ konvertiert wird.
Um dieses Problem zu beheben, gehen Sie wie folgt vor Ansatz:
Hier ist ein Beispielcode Snippet, das die Lösung demonstriert:
type Message struct { Cmd string `json:"cmd"` Data json.RawMessage } type CreateMessage struct { Conf map[string]int `json:"conf"` Info map[string]int `json:"info"` } func main() { var m Message if err := json.Unmarshal(data, &m); err != nil { log.Fatal(err) } switch m.Cmd { case "create": var cm CreateMessage if err := json.Unmarshal([]byte(m.Data), &cm); err != nil { log.Fatal(err) } fmt.Println(m.Cmd, cm.Conf, cm.Info) default: log.Fatal("bad command") } }
Durch die Nutzung dieses Ansatzes können JSON-Daten dynamisch in die entsprechenden Datenstrukturen entmarshallt werden, was eine flexible Handhabung von JSON-Variantendaten in Go ermöglicht.
Das obige ist der detaillierte Inhalt vonWie kann ich JSON-Daten in Go dynamisch in generische Typen entmarshalieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!