req, _ := http.NewRequest(http.MethodGet, "https://api.example.com/messages", nil)
resp,_ := httpClient.Do(req)
bodyBytes, err := ioutil.ReadAll(resp.Body)
var data map[string]interface{}
err = json.Unmarshal(bodyBytes, &data)
if err != nil {
log.Fatal(err)
}
logs := data["messages"]
for _, log := range logs.([]interface{}) {
log = log.(map[string]interface{})["message"]
httpHost := log.(map[string]interface{})["http_host"]
httpStatusCode := log.(map[string]interface{})["http_response_code"].(float64)
endpoint := new(Endpoint)
endpoint.Url = httpHost.(string)
endpoint.StatusCode = int(httpStatusCode)
fmt.Println("Endpoint", endpoint.Url, endpoint.StatusCode)
}
Данный снипет показывает пример работы с json структурой типа:
{
"messages":[
{
"message":{
"http_host":"https://example-1.com",
"http_response_code":200
}
},
{
"message":{
"http_host":"https://example-2.com",
"http_response_code":200
}
}
]
}
Данный json прилетает нам из структуры resp.Body. Далее для создания новой структуры Endpoint с полями Url и StatusCode мы итерируем по полученному словарю и выводим на экран.
В примере я опустил обработку ошибок, прошу так никогда не делать.