Gson в Android Studio: урок по парсингу JSON на Kotlin

При любом сетевом взаимодействии мобильное приложение получает данные в формате JSON, и задача разработчика — быстро превратить эту строку в готовые Kotlin-объекты. Библиотека Gson от Google решает эту проблему за секунды. В этом уроке из цикла Android Studio: уроки на Kotlin вы узнаете, как подключить Gson, написать первую модель, сериализовать и десериализовать данные, а также избежать типичных ошибок, связанных с рефлексией и производительностью.


Зачем нужен Gson, когда есть JSONObject

Ручной парсинг через JSONObject и JSONArray требует писать десятки строк для каждого поля. Gson автоматически сопоставляет ключи JSON с полями вашего data-класса, используя рефлексию. Это сокращает код в разы, снижает вероятность опечаток и позволяет сосредоточиться на бизнес-логике. Именно поэтому Gson остаётся популярным выбором, даже несмотря на появление более современных альтернатив.


Подключение Gson к Android-проекту

Первым делом откройте build.gradle.kts на уровне модуля и добавьте зависимость. Поскольку библиотека активно развивается, рекомендуется использовать свежую стабильную версию.

dependencies {
    implementation("com.google.code.gson:gson:2.10.1")
}

После синхронизации Gradle библиотека готова к использованию. Для работы с Retrofit отдельно подключается конвертер: implementation("com.squareup.retrofit2:converter-gson:2.9.0"). Он связывает сетевой клиент и Gson в одну цепочку.


Создаём data-класс под структуру JSON

Предположим, сервер возвращает такой ответ:

{
  "id": 1,
  "title": "Изучаем Kotlin",
  "author": "Алексей Петров",
  "isPublished": true
}

Создайте Kotlin-класс, поля которого точно соответствуют ключам JSON:

data class Article(
    val id: Int,
    val title: String,
    val author: String,
    val isPublished: Boolean
)

Если ключ в JSON называется иначе, чем поле класса, используйте аннотацию @SerializedName:

data class Article(
    @SerializedName("article_id") val id: Int,
    val title: String,
    @SerializedName("author_name") val author: String,
    @SerializedName("is_published") val isPublished: Boolean
)

Десериализация: из строки JSON в объект Kotlin

Десериализация — это превращение JSON-строки в готовый экземпляр класса. В Gson для этого используется метод fromJson(). Создавать новый экземпляр Gson() при каждом вызове неэффективно — лучше объявить один объект и переиспользовать его.

val gson = Gson()
val jsonString = """{"id":1,"title":"Изучаем Kotlin","author":"Алексей Петров","isPublished":true}"""
val article: Article = gson.fromJson(jsonString, Article::class.java)

Теперь в переменной article находится готовый объект, и можно обращаться к его полям: article.title, article.author. Никаких ручных проверок и приведений типов.


Сериализация: из Kotlin-объекта в строку JSON

Обратный процесс — сериализация — выполняется методом toJson(). Это полезно, когда нужно отправить данные на сервер или сохранить объект в SharedPreferences.

val newArticle = Article(2, "Основы Android", "Мария Иванова", false)
val jsonOutput: String = gson.toJson(newArticle)
// {"id":2,"title":"Основы Android","author":"Мария Иванова","isPublished":false}

Работа со списками и вложенными объектами

Gson умеет парсить не только одиночные объекты, но и массивы JSON. Если сервер возвращает список, десериализация выглядит так:

val jsonArray = """[{"id":1,"title":"Статья 1"},{"id":2,"title":"Статья 2"}]"""
val listType = object : TypeToken<List<Article>>() {}.type
val articles: List<Article> = gson.fromJson(jsonArray, listType)

Вложенные объекты также обрабатываются автоматически. Например, если модель Article содержит поле author: Author, Gson рекурсивно заполнит и его.


Сравнение Gson с аналогами

На рынке существует несколько популярных библиотек для работы с JSON. Выбор зависит от требований к производительности, безопасности и поддержке Kotlin-фич.

Библиотека Механизм Плюсы Минусы
Gson Рефлексия во время выполнения Простой API, не требует кодогенерации, хорошо изучен Медленнее аналогов на Android, проблемы с обфускацией и R8, игнорирует значения Kotlin по умолчанию
Moshi Кодогенерация (KSP) или рефлексия Корректно обрабатывает значения по умолчанию, null-безопасен, легковеснее Gson Требует настройки адаптеров для сложных случаев
Kotlin Serialization Кодогенерация (плагин компилятора) Нативный для Kotlin, самый быстрый, строгая типизация, работает в KMP Требует подключения плагина и аннотации @Serializable

Если вы только начинаете изучать Android Studio: уроки на Kotlin, Gson — отличная точка входа благодаря своей простоте. По мере роста проекта стоит присмотреться к Moshi или Kotlin Serialization.


Практическое задание в Android Studio

Создайте новый проект с Empty Activity и выполните все шаги из урока:

  1. Добавьте зависимость Gson в build.gradle.kts.
  2. Создайте data-класс Book с полями title: String, year: Int, available: Boolean.
  3. В функции onCreate создайте JSON-строку, представляющую книгу, и десериализуйте её с помощью Gson().fromJson().
  4. Выведите название книги в Log.d и покажите Toast с информацией об успешном парсинге.
  5. Сериализуйте объект обратно в строку и сравните с исходным JSON.

Итог

Сегодняшний урок из цикла Android Studio: уроки на Kotlin научил вас работать с библиотекой Gson. Вы подключили зависимость, создали data-класс с аннотациями @SerializedName, освоили сериализацию и десериализацию как одиночных объектов, так и списков. Теперь вы готовы использовать Gson в связке с Retrofit для обработки сетевых запросов — это фундаментальный навык любого Android-разработчика.