Heim >Backend-Entwicklung >Golang >Wie kann ich JSON-Arrays mit gemischten Datentypen in Go entmarshalieren?

Wie kann ich JSON-Arrays mit gemischten Datentypen in Go entmarshalieren?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-27 07:06:10326Durchsuche

How Can I Unmarshal JSON Arrays with Mixed Data Types in Go?

Unmarshaling von JSON-Arrays mit gemischten Werttypen

Das Unmarshaling eines JSON-Arrays mit Werten unterschiedlicher Typen kann in Go aufgrund der Anforderung eine Herausforderung darstellen zur expliziten Typdefinition in Go-Arrays.

Case Studie:

Betrachten Sie das folgende ungültige JSON-Beispiel:

["NewYork", 123]

Ein Versuch, dieses Array in ein Go-Array zu dekodieren, würde fehlschlagen, da das Go-Array einen festen Typ erfordert in diesem Fall unbekannt.

Lösung:

Um diese Einschränkung zu überwinden, bietet Go die interface{}-Typ, der die Speicherung von Werten jeglichen Typs ermöglicht. Durch die Verwendung von interface{} wird es möglich, JSON-Arrays mit gemischten Werttypen zu entmarshalieren, wie unten gezeigt:

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 definieren wir einen benutzerdefinierten Typ UntypedJson als Zuordnung von Zeichenfolgenschlüsseln zu Slices von Schnittstelle{}. Das JSON-Array wird dann in der UntypedJson-Instanz entmarshaled. Die fmt.Printf-Anweisung zeigt die nicht gemarshallten Daten an, die die gemischten Werte aus dem JSON-Array enthalten.

Durch die Verwendung des Typs interface{} wird es möglich, JSON-Arrays mit Werten unterschiedlicher Typen zu entmarshalieren und so mehr zu bieten flexible und vielseitige Lösung für komplexe Datenszenarien.

Das obige ist der detaillierte Inhalt vonWie kann ich JSON-Arrays mit gemischten Datentypen in Go entmarshalieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn