Heim > Backend-Entwicklung > Golang > Wie entmarshaliere ich ein Go-Array mit unterschiedlichen Datentypen?

Wie entmarshaliere ich ein Go-Array mit unterschiedlichen Datentypen?

Patricia Arquette
Freigeben: 2024-12-14 02:28:09
Original
634 Leute haben es durchsucht

How to Unmarshal a Go Array with Disparate Data Types?

Unmarshalling eines Arrays unterschiedlicher Typen in Go

Beim Umgang mit Schlüssel-Wert-Paaren ist das Unmarshalling unkompliziert. Allerdings ist es eine Herausforderung, eine Reihe gemischter Typen in einer bestimmten Reihenfolge aufzulösen. Um dieses Problem zu lösen, ist eine Lösung erforderlich, die flexibel auf unterschiedliche Datentypen reagieren kann.

Die Programmiersprache Go bietet eine elegante Option zur Bewältigung dieses Szenarios. Durch die Nutzung des Schnittstellentyps {} in Verbindung mit der Typzusicherung können wir den zugrunde liegenden Typ jedes Array-Elements dynamisch analysieren und entsprechend entmarshalieren.

Lassen Sie uns den problematischen Code noch einmal betrachten und ihn ändern, um diese Technik zu nutzen:

package main

import (
    "encoding/json"
    "fmt"
)

func decodeJSON(f interface{}) {
    switch vf := f.(type) {
    case map[string]interface{}:
        fmt.Println("is a map:")
        for k, v := range vf {
            checkTypeAndDecode(k, v)
        }
    case []interface{}:
        fmt.Println("is an array:")
        for k, v := range vf {
            checkTypeAndDecode(k, v)
        }
    }
}

func checkTypeAndDecode(k string, v interface{}) {
    switch vv := v.(type) {
    case string:
        fmt.Printf("%v: is string - %q\n", k, vv)
    case int:
        fmt.Printf("%v: is int - %q\n", k, vv)
    default:
        fmt.Printf("%v: ", k)
        decodeJSON(v)
    }
}

func main() {
    my_json := `{
    "an_array":[
    "with_a string",
    {
        "and":"some_more",
        "different":["nested", "types"]
    }
    ]
}`

    var f interface{}
    err := json.Unmarshal([]byte(my_json), &f)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println("JSON:")
        decodeJSON(f)
    }
}
Nach dem Login kopieren

Dieser modifizierte Code verwendet die Funktion decodeJSON, um die JSON-Struktur rekursiv zu analysieren, den Datentyp jedes Elements zu identifizieren und die entsprechende Darstellung zu drucken. Für komplexe verschachtelte Strukturen werden verschachtelte Aufrufe von decodeJSON ausgeführt.

Die von diesem überarbeiteten Code generierte Ausgabe zeigt, wie jedes Element basierend auf seinem Datentyp korrekt identifiziert und gedruckt wird:

JSON:
is a map:
an_array: is an array:
0: is string - "with_a string"
1: is a map:
and: is string - "some_more"
different: is an array:
0: is string - "nested"
1: is string - "types"
Nach dem Login kopieren

Mit Dank dieses verbesserten Verständnisses der Typverarbeitung in Go können Sie Arrays mit einer heterogenen Mischung von Datentypen sicher entmarshamlingieren und so eine genaue und konsistente Datendarstellung in Ihren Anwendungen sicherstellen.

Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich ein Go-Array mit unterschiedlichen Datentypen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage