gpt4 book ai didi

json - 如何创建一个无限嵌套的 json 并在 go lang 数据结构中访问它?

转载 作者:IT王子 更新时间:2023-10-29 01:57:17 25 4
gpt4 key购买 nike

如何创建无限嵌套的 json 并在 go lang 数据结构中访问它,

例如下面是具有 3 个级别的示例 json,通常它应该是动态的,用户可以通过从下拉列表中选择值来添加任何子项,该下拉列表在 UI 上填充为树状下拉列表。

{
"value": {
"Id": "1",
"Text": "abcd",
"Parent": ""
},
"children": [
{
"value": {
"Id": "2",
"Text": "abcd",
"Parent": "1"
},
"children": [
{
"value": {
"Id": "3",
"Text": "abcd",
"Parent": "1"
}
}
]
}
]
}

go 中的结构:我已经创建了这个 go 数据结构,但它最多只能访问基于上述 json 的 3 个级别,我们能否将这个数据结构设为动态的,它应该处理无限嵌套的 json。

 type AutoGenerated struct {
Value struct {
ID string `json:"Id"`
Text string `json:"Text"`
Parent string `json:"Parent"`
} `json:"value"`
Children []struct {
Value struct {
ID string `json:"Id"`
Text string `json:"Text"`
Parent string `json:"Parent"`
} `json:"value"`
Children []struct {
Value struct {
ID string `json:"Id"`
Text string `json:"Text"`
Parent string `json:"Parent"`
} `json:"value"`
} `json:"children"`
} `json:"children"`
}

注意:我们可以添加 n 个父项和 n 个子项,这在 Go 数据结构中可能吗?

你能建议最好和最简单的方法来实现这个吗?

我们如何添加/删除/编辑任何父项或子项? (上面的 json 示例将来自 UI)?要添加/删除/编辑任何需要 json 结构或 id 的父项或子项?

最佳答案

你可以在 Go 中使用递归结构来表示这个 json(递归,我的意思是 Level 包含一个 []Level):

type Value struct {
ID string
Text string
Parent string
}

type Level struct {
Value Value `json:"value"`
Children []Level
}

鉴于您作为字符串 j 列出的 json,我现在可以按如下方式对其进行解码:

var root Level
err := json.Unmarshal([]byte(j), &root)
if err != nil {
panic(err)
}
fmt.Println(root)
fmt.Println(root.Children[0])
fmt.Println(root.Children[0].Children[0])

这个输出:

{{1 abcd } [{{2 abcd 1} [{{3 abcd 1} []}]}]}
{{2 abcd 1} [{{3 abcd 1} []}]}
{{3 abcd 1} []}

Go playground link

关于json - 如何创建一个无限嵌套的 json 并在 go lang 数据结构中访问它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48561945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com