JSON и сериализация

6 вопросов

Работа с JSON в Go: encoding/json, кастомный MarshalJSON/UnmarshalJSON, json.Decoder для потоков, RawMessage для отложенного парсинга, struct tags, encoding/gob для Go-to-Go.

1 Чем отличаются теги json:",omitempty" и json:"-" у полей структуры? 🟢 Лёгкий
Ответ: A) json:"-" исключает поле из JSON; omitempty не включает поле, если значение пустое (0, "", nil)

"-" - поле полностью игнорируется; omitempty - поле не пишется в JSON, если оно пустое (0, "", nil, пустой срез/map).

Подробнее →
2 Зачем нужны кастомные MarshalJSON и UnmarshalJSON и как их реализовать в Go? 🟡 Средний
Ответ: A) Чтобы переопределить формат сериализации типа (например, время или enum по строке)

MarshalJSON/UnmarshalJSON позволяют задать свое представление типа в JSON (формат времени, enum, вложенные структуры).

Подробнее →
3 В чем разница между json.Decoder и json.Unmarshal при парсинге JSON? 🟡 Средний
Ответ: A) Decoder читает поток из io.Reader без загрузки всего в память; Unmarshal требует готовый []byte

Decoder потоковый (io.Reader), Unmarshal работает с полным срезом байт; для стримов предпочтителен Decoder.

Подробнее →
4 Для чего используется тип json.RawMessage в encoding/json? 🟡 Средний
Ответ: A) Чтобы хранить сырой фрагмент JSON и распарсить его позже

RawMessage - это []byte, который при сериализации/десериализации остается сырым JSON; удобно для отложенного парсинга.

Подробнее →
5 Как в Go распарсить JSON неизвестной или произвольной структуры? 🟡 Средний
Ответ: A) В переменную типа map[string]interface{} или interface{}

Unmarshal в map[string]interface{} или interface{} дает дерево map/[]interface{}/примитивы.

Подробнее →
6 Для чего предназначен пакет encoding/gob в Go? 🟡 Средний
Ответ: A) Бинарная сериализация данных между Go-программами; быстрее и компактнее JSON

gob - бинарный формат Go для эффективной сериализации между Go-процессами; не предназначен для других языков.

Подробнее →
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.