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 мы итерируем по полученному словарю и выводим на экран.
В примере я опустил обработку ошибок, прошу так никогда не делать.