получить http.Response в структуру с помощью json.Unmarshal - PullRequest
0 голосов
/ 23 марта 2019

Я вызываю удаленный API и получаю ответ JSON.Я пытаюсь преобразовать *http.Response в структуру, которую я определил.Все, что я пробовал до сих пор, привело к пустой структуре.Вот моя попытка с json. Unmarshal

type Summary struct {
   Created  string  `json:"created"`          
   High     float64 `json:"high"`             
   Low      float64 `json:"low"`              
}

func getSummary() {

   url := "http://myurl"

   resp, err := http.Get(url)
   if err != nil {
       log.Fatalln(err)
   }

   body, err2 := ioutil.ReadAll(resp.Body)
   if err2 != nil {
       panic(err.Error())
   }

   log.Printf("body = %v", string(body))
   //outputs: {"success":true,"message":"","result":["High":0.43600000,"Low":0.43003737],"Created":"2017-06-25T03:06:46.83"}]}

   var summary = new(Summary)
   err3 := json.Unmarshal(body, &summary)
   if err3 != nil {
       fmt.Println("whoops:", err3)
       //outputs: whoops: <nil> 
   }

   log.Printf("s = %v", summary)
   //outputs: s = &{{0 0 0  0 0 0  0 0 0  0}}


}

Что я делаю не так?Теги JSON в моей структуре точно соответствуют ключам json из ответа ...

edit : вот JSON, возвращенный из API

{
  "success": true,
  "message": "''",
  "result": [
    {
      "High": 0.0135,
      "Low": 0.012,
      "Created": "2014-02-13T00:00:00"
    }
  ]
}

edit Я изменил структуру на эту, но все еще не работает

type Summary struct {
   Result struct {
       Created string  `json:"created"`
       High    float64 `json:"high"`
       Low     float64 `json:"low"`
   } 
 }

Ответы [ 2 ]

2 голосов
/ 23 марта 2019

Измените свою структуру следующим образом

type Summary struct {
  Sucess bool `json:"success"`
  Message string `json:"message"`
  Result []Result `json:"result"`
}

type Result struct {
   Created string  `json:"Created"`
   High    float64 `json:"High"`
   Low     float64 `json:"Low"`
} 

Попробуйте ссылку

0 голосов
/ 23 марта 2019

Это потому, что вы пытаетесь разархивировать массив в структуру, используйте массив вместо структуры Result

type Summary struct {
    Result []struct {
        Created string  `json:"created"`
        High    float64 `json:"high"`
        Low     float64 `json:"low"`
    }
}

Используйте эту веб-ссылку для преобразования ваших объектов JSON в Go Struct >> https://mholt.github.io/json-to-go/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...