2

I have a json:

{"code":200,
 "msg":"success",
 "data":{"url":"https:\/\/mp.weixin.qq.com\/cgi-bin\/showqrcode?ticket=gQHQ7jwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyX3pqS0pMZlA4a1AxbEJkemhvMVoAAgQ5TGNYAwQsAQAA"}}

and i define a struct :

type Result struct {
    code int
    msg  string                 `json:"msg"`
    data map[string]interface{} `json:"data"`
}

for this code:

var res Result
json.Unmarshal(body, &res)
fmt.Println(res)

the output is: {0 map[]}

i want to get url in data, how to get it?

BlackMamba
  • 10,054
  • 7
  • 44
  • 67

1 Answers1

4

You should export fields (code, msg, data) for Result by capitalizing the first letter of fields (Code, Msg, Data) to access (set/get) them:

package main

import (
    "encoding/json"
    "fmt"
)

type Result struct {
    Code int                    `json:"code"`
    Msg  string                 `json:"msg"`
    Data map[string]interface{} `json:"data"`
}

func main() {
    str := `{"code":200,"msg":"success","data":{"url":"https:\/\/mp.weixin.qq.com\/cgi-bin\/showqrcode?ticket=gQHQ7jwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyX3pqS0pMZlA4a1AxbEJkemhvMVoAAgQ5TGNYAwQsAQAA"}}`
    var res Result
    err := json.Unmarshal([]byte(str), &res)
    fmt.Println(err)
    fmt.Println(res)
}

Play the code on https://play.golang.org/p/23ah8e_hCa

Related question: Golang - Capitals in struct fields

Community
  • 1
  • 1
philipjkim
  • 3,999
  • 7
  • 35
  • 48