以前寫過python,剛開始接觸golang
以我的json為例,孩子不認識數字,可能是三,可能是十。
[{ "id": 1, "name": "aaa", "children": [{ "id": 2, "name": "bbb", "children": [{ "id": 3, "name": "ccc", "children": [{ "id": 4, "name": "ddd", "children": [] }] }] }] }]
我寫結構
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"` }
但我覺得這太愚蠢了。 如何優化?
您可以在其定義中重複使用 autogenerate
類型:
type autogenerated []struct { id int `json:"id"` name string `json:"name"` children autogenerated `json:"children"` }
測試它:
var o autogenerated if err := json.unmarshal([]byte(src), &o); err != nil { panic(err) } fmt.println(o)
(src
是您的 json 輸入字串。)
#輸出(在 go playground 上嘗試):
[{1 aaa [{2 bbb [{3 ccc [{4 ddd []}]}]}]}]
如果 autogenerate
本身不是切片,則更容易理解和使用:
type autogenerated struct { id int `json:"id"` name string `json:"name"` children []autogenerated `json:"children"` }
然後使用它/測試它:
var o []AutoGenerated if err := json.Unmarshal([]byte(src), &o); err != nil { panic(err) } fmt.Println(o)
輸出相同。在 go playground 上嘗試這個。
以上是golang遞歸json到結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!