gpt4 book ai didi

json - 在 Go Lang 中使用深度嵌套的 JSON

转载 作者:数据小太阳 更新时间:2023-10-29 03:22:28 25 4
gpt4 key购买 nike

我有一个我认为非常困惑的 JSON block ,我想阅读和使用 Go 修改深深嵌套在其中的两个值(表示:我想要这个!)。由于我将其发送到的服务器,我无法更改标签名称。是什么让它特别困难对我来说, parent 有多个 child ,这些 child 也是嵌套的,而且由于有太多“值(value)”标签,我不知道如何指定我想输入哪个“值(value)” child 。

我用这个很快就得到了 Bash 中的值

jq ' .value[0].value[1].value[0].value[1].value[0].value="'"$one"'" | '\ '
.value[0].value[1].value[0].value[1].value[1].value="'"$two"'"'

我最初在 Go 中尝试过这样的格式,但由于子项都被命名为“值”的问题而无法使其工作,我想进入第一个以外的另一个。不幸的是,那些神奇的 JSON to Go 结构都无法处理所有嵌套。

type Bar struct {
Value struct { // Value[0]
Value struct { // Value[1]
Value struct { // Value[0]
Value struct { // Value[1]
Value struct { // Value[1] or Value[2]
}}}}}}

此代码将 JSON 转换为对结构/映射更友好的形式,并打印整个内容。

var foo interface{}
err := json.Unmarshal(blob, &foo)
if err != nil {
fmt.Println("error:", err)
}

m := foo.(map[string]interface{})

// print all
fmt.Println("Loop: ", m)
for k, v := range m {
fmt.Printf("%v : %v", k, v)
}

这是我存储为变量的 JSON

var blob = []byte(`{
"tag": "1",
"value": [{
"tag": "2",
"value": [{
"tag": "3",
"value": [{
"tag": "4",
"type": "x",
"value": "x"
}, {
"tag": "5",
"type": "x",
"value": "x"
}
]
}, {
"tag": "6",
"value": [{
"tag": "7",
"value": [{
"tag": "8",
"type": "x",
"value": "x"
}, {
"tag": "9",
"value": [{
"tag": "10",
"type": "x",
"value": "I want this!"
}, {
"tag": "11",
"type": "Thanks for the help mate!",
"value": "I want this!"
}
]
}
]
}
]
}, {
"tag": "12",
"type": "x",
"value": "x"
}
]
}, {
"tag": "13",
"value": [{
"tag": "14",
"type": "x",
"value": "x"
}, {
"tag": "15",
"value": [{
"tag": "16",
"value": [{
"tag": "17",
"type": "x",
"value": "x"
}
]
}
]
}
]
}
]
}`)

如果您能给我任何帮助或建议,我将不胜感激。

最佳答案

您最初的尝试没有成功,因为您在需要结构片段 (Value []struct{...}) 的地方使用了结构。但这也行不通,因为在某些情况下,值是 slice ,而在某些情况下,它们是字符串,encoding/json 不喜欢这样。您最好的选择是以下两个选项之一:原始文本操作,这可能会更快但更脆弱且更容易出错,或者像第二个示例中那样解码为 map[string]interface{} 和做一些粗糙的类型断言:

var foo map[string]interface{}
err := json.Unmarshal(blob, &foo)
if err != nil {
fmt.Println("error:", err)
}

foo["value"].([]interface{})[0].(map[string]interface{})["value"].([]interface{})[1].(map[string]interface{})["value"].([]interface{})[0].(map[string]interface{})["value"].([]interface{})[1].(map[string]interface{})["value"].([]interface{})[0].(map[string]interface{})["value"]

关于json - 在 Go Lang 中使用深度嵌套的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51369547/

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