繁体   English   中英

让节点树在golang中成为json?

[英]Let the node tree to json in golang?

我有一棵类似以下的树,并想另存为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
            }
          ]
        }
      ]
    }
  ]
}

*请注意,如果Nodes字段没有Node对象的切片,则该字段将在结果json中封送为空值。 如果要使“节点”切片呈现为空,则必须确保将其初始化为空切片。

这里的操场上玩这个代码!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM