Golang пример unmarshal json в map

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

В примере я опустил обработку ошибок, прошу так никогда не делать.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *