让节点树到golang中的json?

时间:2014-04-21 02:37:53

标签: json tree go

我有一个如下所示的树,并希望保存为json格式?

package main
import (  "fmt")
type Node struct {
    Id string
    Nodes []*Node
}

func main() {
    node1 := Node{Id: "1"}
    node2 := Node{Id:"2"}
    node3 := Node{Id: "3"}
    node4 := Node{Id: "4"}
    node1.Nodes = append(node1.Nodes, &node2)
    node2.Nodes = append(node2.Nodes, &node3)
    node3.Nodes = append(node3.Nodes, &node4)
    fmt.Printf("node1: %p %v \n", &node1, node1)
}

我想要的输出json是这样的,怎么做?:

{
  Id:"1",
  Nodes:[
         Id:"2",
         Nodes:[
               Id:"3",
               Nodes:[Id:"4",Nodes:[]]
               ],
        ]

}

1 个答案:

答案 0 :(得分:1)

以下代码应该执行您想要的操作:

package main

import (
    "encoding/json"
    "fmt"
    "log"
)

type Node struct {
    Id    string
    Nodes []*Node
}

func main() {
    node1 := Node{Id: "1"}
    node2 := Node{Id: "2"}
    node3 := Node{Id: "3"}
    node4 := Node{Id: "4"}
    node1.Nodes = append(node1.Nodes, &node2)
    node2.Nodes = append(node2.Nodes, &node3)
    node3.Nodes = append(node3.Nodes, &node4)
    fmt.Printf("node1: %p %v \n", &node1, node1)

    bytes, err := json.Marshal(node1)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(bytes))
}

此代码将输出json,如下所示:

{
  "Id": "1",
  "Nodes": [
    {
      "Id": "2",
      "Nodes": [
        {
          "Id": "3",
          "Nodes": [
            {
              "Id": "4",
              "Nodes": null
            }
          ]
        }
      ]
    }
  ]
}

*请注意,如果Nodes字段没有 Node对象的片段,则该字段将在生成的json中作为空值封送。如果希望节点切片呈现为空,则必须确保将它们初始化为空切片。

在操场here上播放此代码!