В этой статье
Зачем 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-класс с полем-дискриминатором.