„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > GO Array Parsing-Datenmethode mit mehreren Typen

GO Array Parsing-Datenmethode mit mehreren Typen

Gepostet am 2025-04-17
Durchsuche:755

How to Unmarshal a Go Array with Disparate Data Types?

marrshalling ein Array von unterschiedlichen Typen in Go

Bei der Behandlung von Schlüsselwertpaaren sind Unmarshalling direkt. Wenn Sie jedoch eine Reihe von gemischten Typen in einer bestimmten Reihenfolge nicht streichen, stellt es jedoch eine Herausforderung dar. Durch die Lösung dieses Problems erfordert eine Lösung, die unterschiedliche Datentypen auf flexible Weise berücksichtigen kann.

Die Go -Programmiersprache bietet eine elegante Option für die Behandlung dieses Szenarios. Durch die Nutzung der Schnittstelle {} Typ in Verbindung mit der Typ -Behauptung können wir den zugrunde liegenden Typ jedes Array -Elements dynamisch analysieren und entsprechend unmarshal. importieren ( "Codierung/JSON" "fmt" ) func decodejson (f interface {}) { Schalter VF: = f. (Typ) { Fallkarte [String] Schnittstelle {}: fmt.println ("ist eine Karte:") für k, v: = Bereich vf { ygetePeanddecode (k, v) } case [] Schnittstelle {}: fmt.println ("ist ein Array:") für k, v: = Bereich vf { ygetePeanddecode (k, v) } } } func checkTypeAnDeCode (k String, v -Schnittstelle {}) { Schalter VV: = v. (Typ) { Fallzeichenfolge: fmt.printf (" %v: ist String - %Q \ n", K, VV) Fall int: fmt.printf (" %v: ist int - %q \ n", k, vv) Standard: fmt.printf ("%v:", k) decodejson (v) } } func main () { my_json: = `{ "an_array": [ "With_a String", { "und": "seltsamer", "anders": ["verschachtelt", "Typen"] } ] } ` var f interface {} err: = json.unmarshal ([] byte (my_json), & f) Wenn er! = nil { fmt.println (err) } anders { fmt.println ("json:") decodejson (f) } }

Dieser geänderte Code verwendet die Decodejson -Funktion, 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 bei Decodejson durchgeführt.

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)
    }
}

JSON: ist eine Karte: an_array: Ist ein Array: 0: ist String - "mit _a String" 1: Ist eine Karte: und: ist String - "slow_more" anders: Ist ein Array: 0: ist String - "verschachtelt" 1: IS String - "Typen"

Mit diesem erweiterten Verständnis des Typs Handhabung in GO können Sie zuversichtlich unmarshal -Arrays, die eine heterogene Mischung von Datentypen enthalten, zuversichtlich und eine genaue und konsistente Datendarstellung in Ihren Anwendungen sicherstellen.

Neuestes Tutorial Mehr>

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