如何解组请求返回的 JSON?
How can I unmarshall JSONp returned from a request?
我正在尝试使用 USDA's Farmers Market Directory API 接收有关附近农贸市场所在位置的数据,使用邮政编码。我将未编组的响应主体存储在:
type marketResponse struct {
MapsLink string `json:"GoogleLink"`
Address string `json:"Address"`
Schedule string `json:"Schedule"`
Products string `json:"Products"`
}
使用代码:
//TODO: location: "http://search.ams.usda.gov/farmersmarkets/v1/data.svc/locSearch?lat=" + lat + "&lng=" + lng
resp, err := http.Get("http://search.ams.usda.gov/farmersmarkets/v1/data.svc/zipSearch?zip=" + zipcode)
if err != nil {
log.Printf("Could net search zipcode %s: %v", zipcode, err)
}
defer func() {
if err := resp.Body.Close(); err != nil {
log.Println(err)
}
}()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println(err)
}
newMarket := &marketResponse{}
if err := json.Unmarshal(body, newMarket); err != nil {
log.Println(err)
}
log.Println("response: " + newMarket.Address)
问题是,响应主体在 JSONp 中,而我在 JSON 中解组。我如何在 JSONp 中解组,是否使用外部包?
响应 body 是 JSON - 根据响应的 Content-Type:application/json; charset=utf-8
header。
问题是您的 marketResponse
结构与 JSON returned 无关。使用 JSON-to-Go,您的结构应该如下所示:
type MarketResponse struct {
Results []Result `json:"results"`
}
type Result struct {
ID string `json:"id"`
Marketname string `json:"marketname"`
}
不清楚您现有的 marketResponse
结构适合此处的位置,因为 API 端点 return 的数据都不具有该结构。
PS:您应该处理(或return)您的错误,而不仅仅是记录它们;记录它们仍然意味着您的函数继续执行未处理的错误。当遇到 nil 响应 body 或 JSON 解组错误时,您的代码可能会出现恐慌。
我正在尝试使用 USDA's Farmers Market Directory API 接收有关附近农贸市场所在位置的数据,使用邮政编码。我将未编组的响应主体存储在:
type marketResponse struct {
MapsLink string `json:"GoogleLink"`
Address string `json:"Address"`
Schedule string `json:"Schedule"`
Products string `json:"Products"`
}
使用代码:
//TODO: location: "http://search.ams.usda.gov/farmersmarkets/v1/data.svc/locSearch?lat=" + lat + "&lng=" + lng
resp, err := http.Get("http://search.ams.usda.gov/farmersmarkets/v1/data.svc/zipSearch?zip=" + zipcode)
if err != nil {
log.Printf("Could net search zipcode %s: %v", zipcode, err)
}
defer func() {
if err := resp.Body.Close(); err != nil {
log.Println(err)
}
}()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println(err)
}
newMarket := &marketResponse{}
if err := json.Unmarshal(body, newMarket); err != nil {
log.Println(err)
}
log.Println("response: " + newMarket.Address)
问题是,响应主体在 JSONp 中,而我在 JSON 中解组。我如何在 JSONp 中解组,是否使用外部包?
响应 body 是 JSON - 根据响应的 Content-Type:application/json; charset=utf-8
header。
问题是您的 marketResponse
结构与 JSON returned 无关。使用 JSON-to-Go,您的结构应该如下所示:
type MarketResponse struct {
Results []Result `json:"results"`
}
type Result struct {
ID string `json:"id"`
Marketname string `json:"marketname"`
}
不清楚您现有的 marketResponse
结构适合此处的位置,因为 API 端点 return 的数据都不具有该结构。
PS:您应该处理(或return)您的错误,而不仅仅是记录它们;记录它们仍然意味着您的函数继续执行未处理的错误。当遇到 nil 响应 body 或 JSON 解组错误时,您的代码可能会出现恐慌。