我正在调用远程API并获取JSON响应。我正在尝试将*http.Response
转换为我定义的结构。到目前为止,我尝试过的所有操作都导致一个空结构。这是我对json.Unmarshal
type Summary struct {
Created string `json:"created"`
High float64 `json:"high"`
Low float64 `json:"low"`
}
func getSummary() {
url := "http://myurl"
resp, err := http.Get(url)
if err != nil {
log.Fatalln(err)
}
body, err2 := ioutil.ReadAll(resp.Body)
if err2 != nil {
panic(err.Error())
}
log.Printf("body = %v", string(body))
//outputs: {"success":true,"message":"","result":["High":0.43600000,"Low":0.43003737],"Created":"2017-06-25T03:06:46.83"}]}
var summary = new(Summary)
err3 := json.Unmarshal(body, &summary)
if err3 != nil {
fmt.Println("whoops:", err3)
//outputs: whoops: <nil>
}
log.Printf("s = %v", summary)
//outputs: s = &{{0 0 0 0 0 0 0 0 0 0}}
}
我在做什么错?我的结构中的JSON标签与响应中的json键完全匹配...
编辑:这是从API返回的JSON
{
"success": true,
"message": "''",
"result": [
{
"High": 0.0135,
"Low": 0.012,
"Created": "2014-02-13T00:00:00"
}
]
}
修改 我将结构更改为此,但仍无法正常工作
type Summary struct {
Result struct {
Created string `json:"created"`
High float64 `json:"high"`
Low float64 `json:"low"`
}
}
答案 0 :(得分:2)
像这样更改您的结构
type Summary struct {
Sucess bool `json:"success"`
Message string `json:"message"`
Result []Result `json:"result"`
}
type Result struct {
Created string `json:"Created"`
High float64 `json:"High"`
Low float64 `json:"Low"`
}
尝试这个link
答案 1 :(得分:0)
这是因为您试图将数组解组为struct, 使用数组代替Result结构
type Summary struct {
Result []struct {
Created string `json:"created"`
High float64 `json:"high"`
Low float64 `json:"low"`
}
}
使用此网络链接将JSON对象转换为Go Struct >> https://mholt.github.io/json-to-go/