73 lines
1.1 KiB
Go
73 lines
1.1 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"encoding/json"
|
||
|
"bytes"
|
||
|
)
|
||
|
|
||
|
type Node struct {
|
||
|
Type string
|
||
|
Children []interface{}
|
||
|
Url string `json:",omitempty"`
|
||
|
Name string
|
||
|
}
|
||
|
|
||
|
|
||
|
type RootData struct {
|
||
|
Name string
|
||
|
Roots map[string]Node
|
||
|
Version float64
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
func mapToNode(childNode interface{}) (*Node, error) {
|
||
|
if childNode == nil {
|
||
|
return new(Node), nil
|
||
|
}
|
||
|
|
||
|
buf := new(bytes.Buffer)
|
||
|
|
||
|
// Convert interface{} to json
|
||
|
err := json.NewEncoder(buf).Encode(childNode)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
//fmt.Println(buf)
|
||
|
|
||
|
out := new(Node)
|
||
|
|
||
|
// Convert json to Node struct
|
||
|
err = json.NewDecoder(buf).Decode(out)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return out, nil
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
func parseJsonNodes(node *Node) {
|
||
|
|
||
|
//fmt.Println("parsing node ", node.Name)
|
||
|
|
||
|
if (node.Type == "url") {
|
||
|
fmt.Println(node.Url)
|
||
|
} else if (len(node.Children) != 0) { // If node is Folder
|
||
|
for _, _childNode := range node.Children {
|
||
|
// Type of childNode is interface{}
|
||
|
//childNode := Node{}
|
||
|
childNode, err := mapToNode(_childNode)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
parseJsonNodes(childNode)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return
|
||
|
}
|