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

我无法为我的结构获取正确的定义来捕获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


慕田峪9158850
浏览 338回答 1
1回答

斯蒂芬大帝

这对我有用(请参阅上面对您的问题的评论) GoPlaytype 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"}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go