让节点树在golang中转换为json?

让节点树在golang中转换为json?,json,tree,go,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 = appe

我有一个如下所示的树,想另存为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:[]]
               ],
        ]

}

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

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
            }
          ]
        }
      ]
    }
  ]
}
*请注意,如果节点字段没有节点对象的切片,则该字段将在生成的json中封送为空值。如果希望节点切片呈现为空,则必须确保它们已初始化为空切片


在操场上玩这个代码

在我看来,这不像是有效的json。也就是说,你看了吗?