Sobes.tech
Назад к вопросам
Senior
3

What is the difference between json.Unmarshal and json.Decoder, and when would you use each?

Компании, где спрашивали
AndersenAndersen

Ответ от нейросети

sobes.tech AI

json.Unmarshal и json.Decoder — это два способа декодирования JSON в Go, но они имеют разные сценарии использования:

  • json.Unmarshal принимает весь JSON как срез байт ([]byte) и сразу пытается распарсить его в заданную структуру. Это удобно, когда у вас есть весь JSON целиком в памяти.

  • json.Decoder работает с потоком (например, io.Reader), позволяя читать и декодировать JSON по частям. Это полезно для больших данных или когда JSON приходит по сети или из файла постепенно.

Когда использовать:

  • Если JSON небольшой и доступен целиком — json.Unmarshal проще и быстрее.
  • Если JSON большой, или вы хотите читать несколько JSON-объектов из одного потока, или обрабатывать данные по мере поступления — используйте json.Decoder.

Пример с json.Decoder для чтения нескольких JSON-объектов из потока:

decoder := json.NewDecoder(reader)
for {
    var obj MyStruct
    if err := decoder.Decode(&obj); err == io.EOF {
        break
    } else if err != nil {
        log.Fatal(err)
    }
    // обработка obj
}