2016-11-17 56 views
0

我用我golang項目走,杜松子酒服務器,並取出由返回數組作爲響應如何攔截在數組中的REST API響應去,杜松子酒

[ 
    { 
    "Continent": "South America", 
    "Countries": [ 
     { 
     "Country": "Argentina" 
     } 
    ] 
    } 
] 

在外部API的一些數據我這裏golang代碼是怎麼了發送請求和響應截取

client := &http.Client{Transport: tr} 
rget, _ := http.NewRequest("GET", "http://x.x.x.x/v1/geodata", nil) 

resp, err := client.Do(rget) 
if err != nil { 
    fmt.Println(err) 
    fmt.Println("Failed to send request") 
} 
defer resp.Body.Close() 
respbody, err := ioutil.ReadAll(resp.Body) 
c.Header("Content-Type", "application/json") 
c.JSON(200, string(respbody)) 

這給當期的響應,但不是一個數組我得到與整個陣列的字符串。所以我得到的迴應是

"[{\"Continent\":\"South America\",\"Countries\": [{\"Country\": \"Argentina\"} ] } ]" 

如何攔截響應數組而不是字符串? 我甚至嘗試了以下給了我一個數組,但一個空白的。我的響應正文中的元素可能是數組以及字符串,因此內容是混合的。

type target []string 
json.NewDecoder(resp.Body).Decode(target{}) 
defer resp.Body.Close() 
c.Header("Content-Type", "application/json") 
c.JSON(200, target{}) 
+0

的可能的複製[如何獲得JSON響應Golang](http://stackoverflow.com/questions/17156371/how-to-get-json-response-in-golang) – Carpetsmoker

+0

我試過這個。添加更多詳細信息 – aaj

+0

您的JSON不代表字符串數組。嘗試'輸入target [] interface {}'。 –

回答

1

您的第一個示例不起作用,因爲您試圖將字符串編組爲JSON,它只會轉義字符串。 相反,最後一行改爲

c.String(200, string(respbody)) 

這不會改變您從第三方在所有接收的字符串,將剛剛返回。請參閱here

如果要檢查數據,因爲它穿過你的程序,您必須將JSON字符串首先解碼成結構數組是這樣的:

type Response []struct { 
    Continent string `json:"Continent"` 
    Countries []struct { 
     Country string `json:"Country"` 
    } `json:"Countries"` 
}