Unmarshalling von JSON-Arrays mit gemischten Datentypen
Das Unmarshalling von JSON-Arrays mit Werten unterschiedlicher Datentypen kann oft eine Herausforderung darstellen. Betrachten Sie beispielsweise das folgende JSON-Array:
{["NewYork",123]}
Problem:
Zunächst ist es wichtig zu beachten dass der 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, wenn es um JSON geht 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 mühelos 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 Typs interface{} Mit diesem Ansatz können Sie JSON-Arrays mit verschiedenen Datentypen effektiv entmarshalieren.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3