欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

转化JSON嵌套数据为数组(面试常考问题)

最编程 2024-02-16 17:43:02
...

将一个json字符串转换为数组,json字符串格式如下

{
    "id":0,
    "name":"root",
    "desc":"根节点",
    "children":[
        {
            "id":10,
            "name":"network",
            "desc":"网络服务",
            "children":[
                {
                    "id":4,
                    "name":"dns",
                    "desc":"域名系统"
                },
                {
                    "id":2,
                    "name":"lvs",
                    "desc":"负载均衡",
                    "children":[
                        {
                            "id":1,
                            "name":"ilvs",
                            "desc":"内网负载均衡"
                        },
                        {
                            "id":5,
                            "name":"lvs",
                            "desc":"公网负载均衡"
                        }
                    ]
                },
                {
                    "id":9,
                    "name":"nat",
                    "desc":"NAT"
                }
            ]
        },
        {
            "id":6,
            "name":"server",
            "desc":"服务器",
            "children":[
                {
                    "id":8,
                    "name":"ntp",
                    "desc":"授时服务"
                },
                {
                    "id":3,
                    "name":"yum",
                    "desc":"包管理",
                    "children":[
                        {
                            "id":7,
                            "name":"north",
                            "desc":"北方"
                        },
                        {
                            "id":11,
                            "name":"sorth",
                            "desc":"南方"
                        }
                    ]
                }
            ]
        }
    ]
}

经过观察得知json结构体之间有id,name,desc这样三个字段,有的嵌套在children二维数组中,可以先把json结构体先解析成struct类型的变量,在对变量进行递归解析。
结构体定义如下所示

type Tree struct {
   Id       int    `json:"id"`
   Name     string `json:"name"`
   Desc     string `json:"desc"`
   Children []Tree `json:"children"`
}

type Res struct {
   Id       int    `json:"id"`
   Name     string `json:"name"`
   Desc     string `json:"desc"`
}

递归解析代码如下:

func jsonToArray( input Tree) []Res {

   res := []Res{}

   res1 := Res{}
   res1.Id = input.Id
   res1.Name = input.Name
   res1.Desc = input.Desc
   res = append(res,res1)

   for _,v := range input.Children {
      res2 := jsonToArray(v)
      res = append(res,res2...)
   }
   return res
}

main函数如下:

func main(){
    str := ''
    tmp := Tree{}
    err := json.Unmarshal([]byte(str),&tmp)
    if err != nil {}
    fmt.Println(tmp)

    res := jsonToArray(tmp)
    fmt.Println(res)
}