Ich habe schon Python geschrieben, aber ich habe gerade angefangen, mit Golang in Kontakt zu kommen
Nehmen Sie meinen JSON als Beispiel. Das Kind kennt die Zahl nicht. Es kann drei oder zehn sein.
[{ "id": 1, "name": "aaa", "children": [{ "id": 2, "name": "bbb", "children": [{ "id": 3, "name": "ccc", "children": [{ "id": 4, "name": "ddd", "children": [] }] }] }] }]
Ich schreibe Struktur
type AutoGenerated []struct { ID int `json:"id"` Name string `json:"name"` Children []struct { ID int `json:"id"` Name string `json:"name"` Children []struct { ID int `json:"id"` Name string `json:"name"` Children []struct { ID int `json:"id"` Name string `json:"name"` Children []interface{} `json:"children"` } `json:"children"` } `json:"children"` } `json:"children"` }
Aber ich finde das so dumm. Wie optimieren?
Sie können es in seiner Definition wiederverwenden autogenerate
Typ:
type autogenerated []struct { id int `json:"id"` name string `json:"name"` children autogenerated `json:"children"` }
Testen Sie es:
var o autogenerated if err := json.unmarshal([]byte(src), &o); err != nil { panic(err) } fmt.println(o)
(src
ist Ihre JSON-Eingabezeichenfolge.)
Ausgabe (versuchen Sie es auf Go Playground):
[{1 aaa [{2 bbb [{3 ccc [{4 ddd []}]}]}]}]
Es ist einfacher zu verstehen und zu verwenden, wenn autogenerate
selbst kein Slice ist:
type autogenerated struct { id int `json:"id"` name string `json:"name"` children []autogenerated `json:"children"` }
Dann nutzen/testen Sie es:
var o []AutoGenerated if err := json.Unmarshal([]byte(src), &o); err != nil { panic(err) } fmt.Println(o)
Die Ausgabe ist die gleiche. Probieren Sie es auf dem Go-Spielplatz aus.
Das obige ist der detaillierte Inhalt vonGolang rekursiver JSON zur Struktur?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!