【问题标题】:How can I unmarshall JSONp returned from a request?如何解组从请求返回的 JSON?
【发布时间】:2016-08-17 12:28:21
【问题描述】:

我正在尝试使用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 中解组,是否使用外部包?

【问题讨论】:

    标签: json api go jsonp


    【解决方案1】:

    响应正文是 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:您应该处理(或返回)您的错误,而不仅仅是记录它们;记录它们仍然意味着您的函数继续出现未处理的错误。当遇到 nil 响应正文或 JSON 解组错误时,您的代码可能会出现恐慌。

    【讨论】:

    • 我指的是 JavaScript 示例下面的 ex:detailResultHandler( { "marketdetails": { "GoogleLink":"http://maps.google.com/?q=38.881112%2C%20-77.112179%20(%22Ballston+FRESHFARM+Market%22)", "Address":"901 N Taylor St, Ballston, Virginia, 22203", "Schedule":"June - October Thursday 3:00 PM to 7:00 PM", "Products":"Baked goods; Cheese and/or dairy products; Eggs; Fresh fruit and vegetables; Fresh and/or dried herbs; Honey; Meat; Poultry" } } ); 虽然,我理解你的意思并将使用两个结构重构它,marketDetails 和里面的内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 2018-11-26
    • 2017-01-05
    • 2021-07-18
    • 1970-01-01
    相关资源
    最近更新 更多