Solange ich Schlüssel-Wert-Paare haben unmarshalling ist ziemlich geradlinig, aber wie würde ich eine Reihe von verschiedenen Arten in unterschiedlicher Reihenfolge entordnen? Die einzelnen Elemente sind gut definiert und bekannt, aber die Reihenfolge ist nicht.Wie kann man ein Array von verschiedenen Typen korrekt entfernen?
Ich kann nicht mit einer schönen Lösung.
Würde ich versuchen, Fehler über alle Elemente? Gibt es eine Art Unionstyp, der das für mich tun könnte?
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)
}
}
}
Genau das, was ich suchte. –
Das fehlende Teil auf meiner Seite war [Typ Zusicherung] (http://golang.org/ref/spec#Type_assertions) –