У цій статті
Навіщо 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-клас з полем-дискримінатором.