我有以下Golang代码:
package main
import (
"bytes"
"encoding/json"
"fmt"
"strings"
)
func someFunc() {
output := `
{
"predictions": [
{
"displayNames": [
"AAA",
"BBB",
"CCC",
"DDD",
"EEE",
"FFF",
"GGG",
"HHH"
],
"confidences": [
0.99998986721038818,
5.3742646741739009e-06,
1.7922732240549522e-06,
1.5455394475338835e-07,
3.2323268328582344e-07,
6.80681324638499e-08,
9.2994454803374538e-08,
2.317885900993133e-06
],
"ids": [
"552624439724867584",
"7470153467365949440",
"6317231962759102464",
"8911305348124508160",
"4011388953545408512",
"2858467448938561536",
"5164310458152255488",
"1705545944331714560"
]
}
],
"deployedModelId": "ABC123",
"model": "myOwnModel",
"modelDisplayName": "myDisplayName",
"modelVersionId": "1"
}`
var outputJson map[string]interface{}
json.Unmarshal([]byte(output), &outputJson)
// names := outputJson["predictions"].(data)[0].(data)["displayNames"].(data)
// ids := outputJson["predictions"].(data)[0].(data)["ids"].(data)
// confidences := outputJson["predictions"].(data)[0].(data)["confidences"].(data)
// fmt.Printf(fmt.Sprintf("Names:\n%s\n", names))
// fmt.Printf(fmt.Sprintf("IDs:\n%s\n", ids))
// fmt.Printf(fmt.Sprintf("Confidences:\n%s\n", confidences))
fmt.Println("something")
}
func main() {
someFunc()
}
我想从outputJson
访问displayNames
、ids
和confidences
元素。我使用VS Code检查它们的位置,并将它们添加到监视列表。
然后我将位置字符串复制到我的代码中。然而,它并不像图中所示那样工作。抱怨是data
未定义。为什么会发生这种情况,我可以做些什么来访问这些元素?为什么这个data
在监 windows 口中工作,而不是在代码中?
1条答案
按热度按时间eyh26e7m1#
您需要通过
outputJson
来type assert:但是,考虑到你不需要解码任意JSON,一个更好的方法是定义一个Golang类型树,然后解组到其中: