在golang,Unmarshall JSON和无效字符中使用HTTP Client for Places API

时间:2018-06-25 18:33:24

标签: json http go

我是Go的新手,正在学习如何使用它。想测试是否符合Google Places API的要求,但在编写请求时遇到了一些麻烦。似乎请求通过了,我在体内收到了东西,但无法解组。我只想查看以字符串形式打印的json,以便尝试对其进行解码。感谢您的任何帮助,谢谢!

type place struct {
    Name string `json:candidates`
}

func main() {
    places("Grill")
}

func places(inputText string) {
url := "https://maps.googleapis.com/maps/api/place/findplacefromtext/"

placesClient := http.Client{
    Timeout: time.Second * 10,
}

req, err := http.NewRequest(http.MethodGet, url, nil)
if err != nil {
    log.Fatal(err)
}

req.Header.Set("User-Agent", "Testing how to query API's from parameters")
q := req.URL.Query()
q.Add("key", PLACES_KEY)
q.Add("input", inputText)
q.Add("inputtype", "textquery")
req.URL.RawQuery = q.Encode()
pln(req.URL.String())

res, getErr := placesClient.Do(req)
if getErr != nil {
    log.Fatal(getErr)
}

body, readErr := ioutil.ReadAll(res.Body)
if readErr != nil {
    log.Fatal(readErr)
}

output := place{}
jsonErr := json.Unmarshal(body, &output)
if jsonErr != nil {
    log.Fatal(jsonErr)
}

pln(output)
}

1 个答案:

答案 0 :(得分:-1)

感谢您的帮助,最终找到了答案。问题部分是由于我对Places API的理解,我输入了https://maps.googleapis.com/maps/api/place/findplacefromtext/,但需要确保将https://maps.googleapis.com/maps/api/place/findplacefromtext/json放在JSON部分的末尾指定返回类型,否则我的身体会不断得到404错误。可以通过添加以下内容来解决此问题:

if res.StatusCode == 404 {
    log.Fatal("Hit a 404")
}

此外,如果您只想打印字节字符串,这对我有用

n := len(body)
s := string(body[:n])

pln(s)

这使您可以更轻松地查看正在打印的内容