2016-04-24 5 views
2

Ich versuche, die USDA's Farmers Market Directory API zu verwenden, um eine Daten zu erhalten, in der Nähe der Bauernmärkte sind, mit einer Postleitzahl. Ich speichere die entordnet Körper der Antwort in:Wie kann ich JSONp von einer Anfrage zurückmelden?

type marketResponse struct { 
     MapsLink string `json:"GoogleLink"` 
     Address string `json:"Address"` 
     Schedule string `json:"Schedule"` 
     Products string `json:"Products"` 
} 

mit dem Code:

//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) 

Das Problem ist, die Antwort Körper in JSONP ist, und ich bin unmarshalling in JSON. Wie kann ich in JSONp mithilfe eines externen Pakets entpacken?

Antwort

2

Der Antworttext ist JSON - wie im Header der Antwort Content-Type:application/json; charset=utf-8.

Das Problem ist, dass Ihre Struktur marketResponse keine Beziehung zu dem zurückgegebenen JSON hat. Mit JSON-to-Go, sollten Sie Ihre Struktur wie folgt aussehen:

type MarketResponse struct { 
    Results []Result `json:"results"` 
} 

type Result struct { 
    ID string `json:"id"` 
    Marketname string `json:"marketname"` 
} 

Es ist nicht klar, wo Ihre bestehende marketResponse struct hier passt, da weder API Endpunktdaten mit dieser Struktur zurückgibt.

PS: Sie sollten Ihre Fehler behandeln (oder zurückgeben) und nicht nur sie protokollieren; Logging bedeutet, dass Ihre Funktion mit unbehandeltem Fehler fortfährt. Ihr Code wird möglicherweise in Panik versetzt, wenn er auf einen Antwortkörper nil oder JSON-Unmarshalling-Fehler stößt.

+0

Ich wurde zum ex unter dem Beispiel JavaScript verweisen: 'detailResultHandler ( { "marketdetails": { "GoogleLink":" http://maps.google.com/?q=38.881112%2C% 20-77.112179% 20 (% 22Ballston + FRESHFARM + Markt% 22) ", " Adresse ":" 901 N Taylor St, Ballston, Virginia, 22203 ", " Zeitplan ":" Juni - Oktober Donnerstag 15:00 zu 19:00 PM ", " Produkte ":" Backwaren; Käse und/oder Milchprodukte; Eier; Frisches Obst und Gemüse; Frische und/oder getrocknete Kräuter; Honig; Fleisch; Geflügel " } } };' Obwohl, ich verstehe Ihren Punkt und wird es mit zwei Strukturen, 'marketDetails' und was drin ist, umgestalten –