转化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)
}