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 {
  // ...
}
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
@ghostiam
На Go писатель, серверов пинатель.
json.Unmarshal использует массив байт, а json.NewDecoder это потоковый парсер, которому не нужно сразу хранить в памяти все данные для парсинга.

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

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

Войти через центр авторизации
Похожие вопросы
Spectrum Екатеринбург
от 100 000 до 160 000 ₽
MillionAgents Москва
от 150 000 до 200 000 ₽
09 апр. 2020, в 01:55
1500 руб./за проект
09 апр. 2020, в 01:27
1000 руб./за проект
08 апр. 2020, в 22:52
5000 руб./за проект