Wie unmarshall eine Reihe von verschiedenen Arten richtig?

Solange ich Schlüssel-Wert-Paare unmarshalling ist ziemlich geradlinig, aber wie würde ich unmarshall eine Reihe von verschiedenen Arten in unterschiedlicher Reihenfolge? Die einzelnen Elemente sind gut definiert und bekannt sind, aber die Reihenfolge ist nicht.

Kann ich nicht kommen, mit eine schöne Lösung.

Würde ich versuchen, Fehler über alle Elemente?
Gibt es irgendeine Art von union-Typ, der könnte das für mich tun?

Spielplatz-version

package main

import (
    "encoding/json"
    "fmt"
)

var my_json string = `{
    "an_array":[
        "with_a string",
        {
            "and":"some_more",
            "different":["nested", "types"]
        }
    ]
}`

type MyInner struct {
    And     string
    Different   []string
}

type MyJSON struct {
    An_array []json.RawMessage
}

func main() {
    var my_json_test MyJSON

    e := json.Unmarshal([]byte(my_json), &my_json_test)
    if e != nil {
        fmt.Println(e)
    } else {
        for index, value := range my_json_test.An_array {
            fmt.Println("index: ", index)
            fmt.Println("value: ", string(value))
        }
        var my_inner MyInner
        err := json.Unmarshal(my_json_test.An_array[1], &my_inner)
        if err != nil {
            fmt.Println(err)
        } else {
            fmt.Println("inner structure: ", my_inner)
        }
    }
}
Schreibe einen Kommentar