Skip to main content
CheckTown
Конвертеры

Как конвертировать JSON в Kotlin data-классы

Опубликовано 5 мин чтения
В этой статье

Зачем Kotlin data-классы из JSON

Kotlin data-классы предоставляют лаконичный способ моделирования JSON-данных со встроенной поддержкой equals, hashCode, copy и деструктуризации. Для Android-разработчиков и бэкенд-проектов на Kotlin ручное написание data-классов для каждого ответа API занимает много времени и подвержено ошибкам. Наш конвертер JSON в Kotlin генерирует идиоматические data-классы с правильной null safety, аннотациями сериализации и конвенциями именования за считанные секунды.

Система null safety Kotlin является одной из его сильнейших особенностей, но требует явных объявлений nullable типов. При конвертации JSON — где любое поле может быть потенциально null — конвертер интеллектуально анализирует данные, чтобы определить, какие поля должны быть nullable (отмечены ?), а какие могут безопасно быть non-null, создавая более безопасный код с самого начала.

Возможности конвертера

Конвертер создаёт Kotlin data-классы, адаптированные к вашей библиотеке сериализации и требованиям проекта.

  • Nullable типы — поля с null значениями в образце JSON генерируют nullable типы (String?), тогда как присутствующие значения генерируют non-null типы (String), точно отражая контракт данных
  • @SerializedName — генерирует аннотации Gson @SerializedName, когда ключи JSON используют snake_case или другие форматы, отличные от camelCase, отображая их на идиоматические имена свойств Kotlin
  • Значения по умолчанию — необязательные поля могут включать значения по умолчанию (пустые строки, пустые списки, null) в конструкторе, делая data-класс гибким для частичных ответов JSON

Попробуйте бесплатно — без регистрации

Конвертировать JSON в Kotlin →

Android-специфичные паттерны

Kotlin data-классы, сгенерированные из JSON, особенно полезны в рабочих процессах Android-разработки.

  • Parcelize — сгенерированные data-классы можно аннотировать @Parcelize и реализовать Parcelable для передачи между активностями и фрагментами Android без написания кода парцелизации
  • Интеграция с Room — вывод может служить классами сущностей Room, добавив аннотации @Entity и @PrimaryKey, связывая ответы API непосредственно с локальным хранилищем базы данных
  • Совместимость с Retrofit — сгенерированные классы работают сразу с Retrofit и конвертерами Gson/Moshi, позволяя определить API-интерфейсы и начать выполнять сетевые запросы в течение минут

Часто задаваемые вопросы

Как конвертер обрабатывает null safety?

Конвертер проверяет каждое поле в образце JSON. Поля с null значениями типизируются как nullable (например, String?). Поля с фактическими значениями типизируются как non-null (например, String). Для наиболее точной null safety предоставьте образец JSON, представляющий полный диапазон ваших данных — включая поля, которые могут быть null в продакшне.

Использовать val или var для свойств data-класса?

Конвертер генерирует свойства val (только для чтения) по умолчанию, следуя предпочтению Kotlin к неизменяемости. Data-классы со свойствами val потокобезопасны и проще для понимания. Если вам нужны изменяемые свойства для конкретных случаев, таких как сущности Room с автоматически генерируемыми ID, вы можете изменить отдельные свойства на var после генерации.

Можно ли генерировать sealed-классы для полиморфного JSON?

Конвертер генерирует стандартные data-классы из структуры JSON. Для полиморфного JSON (где поле определяет тип объекта) вам нужно вручную создать иерархию sealed-классов после генерации. Используйте конвертер для генерации каждого варианта как отдельного data-класса, затем оберните их в sealed-класс с полем-дискриминатором.

Похожие инструменты