猿问

go 字符串处理和 JSON

新地鼠来了!我正在使用 go 中的 rest API,我现在正在解析我的第一个返回 JSON,似乎遇到了一些麻烦。


首先,来自 API 调用的原始返回让我知道:


spew.Dump(body)


(string) (len=205) "{\"return\": {\n    \"apiMajorVersion\": 3,\n    \"apiMinorVersion\": 0,\n    \"esmMajorVersion\": 9,\n    \"esmMinorVersion\": 5,\n    \"esmPatch\": \"MR7\",\n    \"esmRevision\": 0,\n    \"esmVersionString\": \"9.5.0 20150908\"\n}}"

字符串中嵌入了所有反斜杠和换行符。如果我打印


fmt.Println(body)


{"return": {

    "apiMajorVersion": 3,

    "apiMinorVersion": 0,

    "esmMajorVersion": 9,

    "esmMinorVersion": 5,

    "esmPatch": "XX7",

    "esmRevision": 0,

    "esmVersionString": "9.5.0 20150908"

}}

然后我得到有效的json。


如果我尝试将它解组到结构中,我将无法正确获取结构中的值。


type ESMVersionStruct struct {

    APIMajorVersion     int8 `json:"return>apiMajorVersion"`

    APIMinorVersion     int8 `json:"apiMinorVersion"`

    ESMMajorVersion     int8 `json:"esmMajorVersion"`

    ESMMinorVersion     int8 `json:"esmMinorVersion"`

    ESMPatch            string `json:"esmPatch"`

    ESMRevision         int8 `json:"esmRevision"`

    ESMVersionString    string `json:"esmVersionString"`

}

我已经尝试过在返回中指定对象而不是。


jsonData := []byte(body)

var ESMVersion ESMVersionStruct

json.Unmarshal(jsonData, &ESMVersion)


fmt.Println(ESMVersion.APIMajorVersion)

fmt.Print(ESMVersion.APIMinorVersion)

最后两个都返回空值。


在此先感谢您对这方面的任何帮助!


慕的地6264312
浏览 147回答 1
1回答

呼如林

你的类型应该是:type ESMVersionStruct struct {    Return struct {        APIMajorVersion     int8 `json:"apiMajorVersion"`        APIMinorVersion     int8 `json:"apiMinorVersion"`        ESMMajorVersion     int8 `json:"esmMajorVersion"`        ESMMinorVersion     int8 `json:"esmMinorVersion"`        ESMPatch            string `json:"esmPatch"`        ESMRevision         int8 `json:"esmRevision"`        ESMVersionString    string `json:"esmVersionString"`    } `json:"return"`}也就是说,您的结构嵌入在另一个Return结构中。
随时随地看视频慕课网APP

相关分类

Go
我要回答