使用golang'读取嵌套的json数据;s编码/json
我无法为我的结构获取正确的定义,以捕获保存在变量中的嵌套使用golang'读取嵌套的json数据;s编码/json,json,encoding,go,Json,Encoding,Go,我无法为我的结构获取正确的定义,以捕获保存在变量中的嵌套json数据。我的代码片段如下所示: package main import "fmt" import "encoding/json" type Data struct { P string `json:"ports"` Ports struct { Portnums []int } Protocols []string `json:"protocols"` } func main()
json
数据。我的代码片段如下所示:
package main
import "fmt"
import "encoding/json"
type Data struct {
P string `json:"ports"`
Ports struct {
Portnums []int
}
Protocols []string `json:"protocols"`
}
func main() {
y := `{
"ports": {
"udp": [
1,
30
],
"tcp": [
100,
1023
]
},
"protocols": [
"tcp",
"udp"
]
}`
var data Data
e := json.Unmarshal([]byte(y), &data)
if e == nil {
fmt.Println(data)
} else {
fmt.Println("Failed:", e)
}
}
$ go run foo.go
Failed: json: cannot unmarshal object into Go value of type string
这对我来说很管用(见上面对你问题的评论)
输出
main.Data{
Ports:struct {
Tcp []float64 "json:\"tcp\"";
Udp []float64 "json:\"udp\""
}{
Tcp:[]float64{100, 1023},
Udp:[]float64{1, 30}
},
Protocols:[]string{"tcp", "udp"}
}
您正试图将数据
y
解组为指向y
的指针。Unmarshal
的第二个参数应该是&data
,而不是&y
。很抱歉,在复制+粘贴过程中出现了输入错误。解组仍然失败:(非常感谢你,斯贝里!
main.Data{
Ports:struct {
Tcp []float64 "json:\"tcp\"";
Udp []float64 "json:\"udp\""
}{
Tcp:[]float64{100, 1023},
Udp:[]float64{1, 30}
},
Protocols:[]string{"tcp", "udp"}
}