TGViewer
Backend Portal | Программирование Backend Portal | Программирование @backendportal · 16.1K subscribers
Post #3645 835
Backend Checklist — День 13: JSON Serialization

Serialization — это преобразование Python objects в текст для передачи по сети. Звучит как простая смена формата, но на деле это скорее перевод, а при переводе часть информации может потеряться.

В JSON всего семь типов, а у ваших objects их гораздо больше


Весь набор типов JSON — это object, array, string, number, true, false, null. И всё. Никаких datetime, Decimal, set, UUID или bytes. Поэтому более сложные типы приходится преобразовывать, иначе json.dumps() завершится с TypeError:

datetime, UUID, Decimal — соответствующего JSON-типа нет, поэтому их обычно преобразуют в строки
set, bytes — прямого аналога тоже нет, поэтому нужно выбрать представление: например, setlist, а bytes → Base64
tuple — незаметно превращается в array, а после десериализации возвращается уже как list

Последний пример отлично показывает суть проблемы. Вы сериализуете tuple, а десериализуете уже list. Данные сохранились, но тип — нет.

Object, который вы получаете обратно, — не обязательно тот же object, который вы отправили

Round trip через JSON может быть lossy. datetime превращается в строку и останется строкой, пока кто-то явно не преобразует её обратно. Decimal, если привести его к float, чтобы он поместился в JSON, вернётся как float и потенциально потеряет точность.

Serialization — это перевод на язык, в котором всего семь «слов». Всё, для чего в JSON есть собственный тип, сохраняется напрямую. Для всего остального нужны соглашения, понятные обеим сторонам, иначе информация не переживёт передачу.

Например, в Python:
json.loads(json.dumps(("a", "b")))

вернёт:
["a", "b"]


Round trip сохранил значения, но изменил тип данных.

👉 @BackendPortal
More from @backendportal
  1. Sep 23, 2026Если бы пришлось заново изучать System Design в 2026 году, я бы придерживался такого roadm…
  2. Sep 23, 2026Объектное хранилище в эпоху быстрых данных Объём данных, с которыми нужно работать, растёт…
  3. Sep 23, 2026Ваш API работает медленно. Что проверите первым? • Добавите database index • Увеличите рес…
  4. Sep 22, 2026DevOps-инструмент недели: sofka Kubernetes говорит, что что-то сломалось. Но говорит ли он…
  5. Sep 22, 2026Полезная шпаргалка по SQL: основы JOIN-запросы и агрегация Изучите базовые операции SQL: в…
  6. Sep 21, 2026Roadmap, которому стоит следовать, чтобы стать сильным Backend Developer в 2026 году: 1. P…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →