以前写过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中文网其他相关文章!