如何解析从请求返回的JSONp?
问题描述:
我正在尝试使用USDA's Farmers Market Directory API来接收有关附近农夫市场所在位置的数据,并使用邮政编码。我存储在响应的解组体:如何解析从请求返回的JSONp?
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?
答
响应正文是JSON - 根据响应的Content-Type:application/json; charset=utf-8
标题。
问题是您的marketResponse
结构与返回的JSON没有关系。使用JSON-to-Go,你的结构应该是这样的:
type MarketResponse struct {
Results []Result `json:"results"`
}
type Result struct {
ID string `json:"id"`
Marketname string `json:"marketname"`
}
在您现有的marketResponse
结构适合在这里,因为没有API端点与结构返回数据目前尚不清楚。 PS:你应该处理(或返回)你的错误,而不是只记录它们;记录它们仍然意味着你的函数继续处理未处理的错误。遇到无响应正文或JSON解组错误时,您的代码可能会恐慌。
我指的是JavaScript示例以下例如: 'detailResultHandler( { “marketdetails”:{ “GoogleLink”:“http://maps.google.com/?q=38.881112%2C% 20-77.112179%20(%22Ballston + FRESHFARM + Market%22)“, ”地址“:”901N Taylor St,Ballston,Virginia,22203“, ”Schedule“:”June- October Thursday 3:00 PM to 7:00 PM“; } } };”烘焙食品;奶酪和/或乳制品;鸡蛋;新鲜水果和蔬菜;新鲜和/或干香草;蜂蜜; 虽然,我理解你的观点,并将使用两个结构“marketDetails”和里面的内容来重构它 –