you_are_enot
@you_are_enot
Пограммист любитель

В чём разница между json.Unmarshal и json.NewDecoder?

В чём приципиальная разница между двумя методами при разборе json? В каких случаях их лучше использовать?

resp, err := http.Get(requestURL)
if err != nil {
  // ...
}
defer resp.Body.Close()

req := &respData{}
if err := json.NewDecoder(resp.Body).Decode(req); err != nil {
  // ...
}


resp, err := http.Get(requestURL)
if err != nil {
   // ...
}
defer resp.Body.Close()

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

var restResponse RestResponse
if err := json.Unmarshal(body, &restResponse); err != nil {
  // ...
}
  • Вопрос задан
  • 1612 просмотров
Решения вопроса 1
@ghostiam
На Go писатель, серверов пинатель.
json.Unmarshal использует массив байт, а json.NewDecoder это потоковый парсер, которому не нужно сразу хранить в памяти все данные для парсинга.

Для парсинга json из файла или из запроса, я бы советовал json.NewDecoder, так как он будет меньше потреблять памяти (не нужно заранее считывать в память массив байт).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
json.NewDecoder используется при взаимодействии с API, а json.Unmarshal при работе с данными из памяти - например забрали массив данных с базы и потом обрабатываем его
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы