为了账号安全,请及时绑定邮箱和手机立即绑定

使用 golang 的 encoding/json 读取嵌套的 json 数据

使用 golang 的 encoding/json 读取嵌套的 json 数据

Go
慕田峪9158850 2021-09-21 16:24:17
我无法为我的结构获取正确的定义来捕获json保存在变量中的嵌套数据。我的代码片段如下:package mainimport "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
查看完整描述

1 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

这对我有用(请参阅上面对您的问题的评论) GoPlay


type Data struct {

    Ports struct {

        Tcp []float64 `json:"tcp"`

        Udp []float64 `json:"udp"`

    } `json:"ports"`

    Protocols []string `json:"protocols"`

}


func main() {

    y := `{

                "ports": {

            "udp": [

                1, 

                30

            ], 

            "tcp": [

                100, 

                1023

            ]

            }, 

            "protocols": [

            "tcp", 

            "udp"

            ]

    }`

    d := Data{}

    err := json.Unmarshal([]byte(y), &d)

    if err != nil {

        fmt.Println("Error:", err.Error())

    } else {

        fmt.Printf("%#+v", d)

    }


}

输出


main.Data{

    Ports:struct { 

        Tcp []float64 "json:\"tcp\"";

        Udp []float64 "json:\"udp\"" 

    }{

        Tcp:[]float64{100, 1023},

        Udp:[]float64{1, 30}

    },

    Protocols:[]string{"tcp", "udp"}

}


查看完整回答
反对 回复 2021-09-21
  • 1 回答
  • 0 关注
  • 336 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信