提问人:Anz 提问时间:6/29/2022 更新时间:6/29/2022 访问量:48
Golang 多维切片成预期的输出字符串 json
Golang multidimensional slices into expected output string json
问:
在我的 Go 代码中,我有多维字符串切片
input := [][]string{
{"foods", "food by cooking technique", "baked food"},
{"foods", "food by cooking technique", "baked beans"},
{"foods", "food by type", "dried food"},
{"drinks", "hot drinks", "tea"},
{"drinks", "hot drinks", "herbal tea"},
{"drinks", "cold drinks", "ice cream drinks"},
}
如何转换为 JSON,以便生成的打印输出符合预期。也许与递归
{
"data": [
{
"name": "foods",
"data": [
{
"name": "food by cooking technique",
"data": [
{ "name": "baked food" },
{ "name": "baked beans" }
]
},
{
"name": "food by type",
"data": [
{ "name": "dried food" }
]
}
]
},
{
"name": "drinks",
"data": [
{
"name": "hot drinks",
"data": [
{ "name": "tea" },
{ "name": "herbal tea" }
]
},
{
"name": "cold drinks",
"data": [
{ "name": "ice cream drinks" }
]
}
]
}
]
}
仍然没有想出关于这个的想法,谢谢你的帮助
答:
1赞
p1gd0g
6/29/2022
#1
不快,但是一种可以理解的方法:
package main
import (
"encoding/json"
"log"
)
type mapStruct struct {
Data map[string]*mapStruct
}
type dataStruct struct {
Name string `json:"name,omitempty"`
Data []*dataStruct `json:"data,omitempty"`
}
func main() {
input := [][]string{
{"foods", "food by cooking technique", "baked food"},
{"foods", "food by cooking technique", "baked beans"},
{"foods", "food by type", "dried food"},
{"drinks", "hot drinks", "tea"},
{"drinks", "hot drinks", "herbal tea"},
{"drinks", "cold drinks", "ice cream drinks"},
}
data := &mapStruct{}
for _, v := range input {
temp := data
for _, vv := range v {
if temp.Data == nil {
temp.Data = map[string]*mapStruct{}
}
if _, ok := temp.Data[vv]; !ok {
temp.Data[vv] = &mapStruct{}
}
temp = temp.Data[vv]
}
}
output := &dataStruct{}
fun(output, data)
bts, err := json.MarshalIndent(output, "", "\t")
if err != nil {
log.Println(err)
return
}
log.Println(string(bts))
}
func fun(d *dataStruct, m *mapStruct) {
for k, v := range m.Data {
d.Data = append(d.Data, &dataStruct{})
d.Data[len(d.Data)-1].Name = k
fun(d.Data[len(d.Data)-1], v)
}
}
评论
0赞
Anz
6/29/2022
OK不错..它看起来很简单,但对我来说很混乱,因为它在进行数据检查时必须像递归一样循环。THKS的方法很容易理解
评论