Heim > Artikel > Backend-Entwicklung > Wie entmarshaliere ich JSON-Arrays mit gemischten Datentypen in Go?
Unmarshalling von JSON-Arrays mit gemischten Datentypen
Die Aufgabe, JSON-Arrays mit Werten unterschiedlicher Datentypen zu entmarshallieren, kann oft eine Herausforderung darstellen. Betrachten Sie beispielsweise das folgende JSON-Array:
{["NewYork",123]}
Problem:
Erstens ist es wichtig zu beachten, dass das bereitgestellte JSON syntaktisch falsch ist. JSON-Objekte erfordern Schlüssel für jeden Wert, daher wäre eine korrekte Darstellung entweder {"key":["NewYork",123]} oder einfach ["NewYork",123].
Außerdem beim Umgang mit JSON Bei Arrays, die aus mehreren Datentypen bestehen, tritt das Problem auf, wenn Go-Arrays einen bestimmten Typ erfordern. Dies kann dazu führen, dass Sie sich fragen, wie Sie mit solchen Situationen umgehen sollen.
Lösung:
Der Schlüssel zur Lösung dieses Problems liegt in der Verwendung der Typschnittstelle{}. Sie können damit Werte unterschiedlicher Typen verarbeiten, ohne dass eine explizite Typkonvertierung erforderlich ist. Hier ist ein Codebeispiel, das zeigt, wie es funktioniert:
import ( "encoding/json" "fmt" ) const j = `{"NYC": ["NewYork",123]}` type UntypedJson map[string][]interface{} func main() { ut := UntypedJson{} fmt.Println(json.Unmarshal([]byte(j), &ut)) fmt.Printf("%#v", ut) }
In diesem Beispiel verwenden wir UntypedJson als benutzerdefinierten Typ, der Zeichenfolgen Slices der Schnittstelle {} zuordnet. Durch die Verwendung des Typs interface{} können wir problemlos gemischte Datentypen innerhalb des JSON-Arrays verarbeiten.
Die Ausgabe des Programms wäre:
<nil> map[string][]interface{}{"NYC": \["NewYork" 123]}
Schlussfolgerung:
Durch die Nutzung des Schnittstellentyps {} können Sie mit diesem Ansatz JSON-Arrays mit verschiedenen Datentypen effektiv entmarshalieren.
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich JSON-Arrays mit gemischten Datentypen in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!