【发布时间】:2016-05-31 12:34:14
【问题描述】:
我正在尝试使用 Flickr API,并且我有一个端点可以给我这样的响应
{
"photos": {
"page": 1,
"pages": 500,
"perpage": 1,
"total": 500,
"photo": [
{
"id": "12345",
"owner": "12345@N01",
"secret": "12ab345xyz",
"server": "1234",
"farm": 1,
"title": "Some Title",
"ispublic": 1,
"isfriend": 0,
"isfamily": 0
},
...
]
},
"stat": "ok"
}
我有一个看起来像这样的结构
type FlickrResp struct {
Photos struct {
Page int `json:"page"` //what page the results were retreived from
Pages int `json:"pages"` //total number of pages of results
Perpage int `json:"perpage"` //number of results per page
Total int `json:"total"` //total number of results
Photo []struct {
ID string `json:"id"` //image ID
Owner string `json:"owner"` //owner ID
Secret string `json:"secret"` //owner secret
Server string `json:"server"` //server ID
Farm int `json:"farm"` //farm ID
Title string `json:"title"` //image title
Ispublic string `json:"ispublic"` //is image publicly viewable?
Isfriend string `json:"isfriend"` //is image owner my friend?
Isfamily string `json:"isfamily"` //is image owner my family?
} `json:"photo"` //array of objects with details of photos
} `json:"photos"` //object that holds information about photoset
Stat string `json:"stat"` //status
}
我正在尝试解组
var fr FlickrResp //create blank struct of type FlickrResp to hold JSON
resp, err := ioutil.ReadAll(flickrCB.Body) //read HTTP GET response
if err != nil {
}
json.Unmarshal([]byte(resp), &fr) //serialize JSON into template
flickCB.Body 来自 http.Get
问题是我只得到照片数组的第一个元素。当我打印转换为字符串的响应对象时,我可以看到我有多个元素。我究竟做错了什么?几天来,我一直在反对 Unmarshal 和更复杂的 JSON 响应。
【问题讨论】:
-
您是否正在阅读来自
json.Unmarshal的错误?当我尝试上述方法时,我遇到了ispublic、isfriend和isfamily与结构所期望的字符串之间的类型不匹配的问题。如果我更改类型,它似乎可以正常工作。这是一个更改示例,包括json.Number的一个字段的用法,在这种情况下可以很方便 - play.golang.org/p/4fE_MkxgxS。我在结果中看到Photo中有两个条目。 -
做到了,谢谢。我不想谈论我经历了多少次。
标签: arrays json go unmarshalling flickr