package main
import (
"encoding/json"
"fmt"
)
type Node struct {
ID string `json:"id"`
ParentID string `json:"parent_id"`
Name string `json:"name"`
Children []*Node `json:"children,omitempty"`
}
func Convert(items []*Node, parentID string) []*Node {
tree := make([]*Node, 0)
for _, item := range items {
if item.ParentID == parentID {
item.Children = Convert(items, item.ID)
tree = append(tree, item)
}
}
return tree
}
func main() {
items := []*Node{
{"1", "", "1", nil},
{"2", "1", "1-2", nil},
{"3", "1", "1-3", nil},
{"4", "3", "1-3-4", nil},
{"5", "", "5", nil},
{"6", "5", "5-6", nil},
}
tree := Convert(items, "")
toJson, _ := json.MarshalIndent(tree, "", " ")
fmt.Println(string(toJson))
}
output:
[
{
"id": "1",
"parent_id": "",
"name": "1",
"children": [
{
"id": "2",
"parent_id": "1",
"name": "1-2"
},
{
"id": "3",
"parent_id": "1",
"name": "1-3",
"children": [
{
"id": "4",
"parent_id": "3",
"name": "1-3-4"
}
]
}
]
},
{
"id": "5",
"parent_id": "",
"name": "5",
"children": [
{
"id": "6",
"parent_id": "5",
"name": "5-6"
}
]
}
]