使用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"}
}