DANFA

Kotlin: Строку в JSON

Для работы с JSON в Kotlin используется библиотека kotlinx.serialization. Вот как это работает:

Настройка проекта


Добавьте в "build.gradle" следующие зависимости:
plugins {
    kotlin("jvm") version "1.8.0"
    kotlin("plugin.serialization") version "1.8.0"
}

dependencies {
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0")
}

Создание модели данных


Создайте data-класс с аннотацией @Serializable:
@Serializable
data class User(
    val name: String,
    val age: Int,
    val email: String
)

Преобразование объекта в JSON


Используйте метод encodeToString():
fun main() {
    val user = User("Иван", 25, "ivan@example.com")
    
    // Преобразование в JSON строку
    val jsonString = Json.encodeToString(user)
    println(jsonString)  // {"name":"Иван","age":25,"email":"ivan@example.com"}
}

Дополнительные возможности



Работа с коллекциями
val users = listOf(
    User("Иван", 25, "ivan@example.com"),
    User("Петр", 30, "petr@example.com")
)

val jsonArray = Json.encodeToString(users)

Настройка формата JSON
Можно изменить параметры форматирования:
val prettyPrintedJson = Json {
    prettyPrint = true
    isLenient = true
}.encodeToString(user)

Игнорирование полей
Если нужно исключить некоторые поля из сериализации:
@Serializable
data class User(
    val name: String,
    val age: Int,
    @Transient val password: String  // Это поле не будет включено в JSON
)

Пример полного кода


import kotlinx.serialization.*
import kotlinx.serialization.json.*

@Serializable
data class User(
    val name: String,
    val age: Int,
    val email: String
)

fun main() {
    val user = User("Иван", 25, "ivan@example.com")
    
    // Базовая сериализация
    val jsonString = Json.encodeToString(user)
    println("Базовый JSON: $jsonString")
    
    // Форматированный JSON
    val formattedJson = Json {
        prettyPrint = true
    }.encodeToString(user)
    println("\nФорматированный JSON:")
    println(formattedJson)
}

Этот код создаст JSON-строку из объекта и покажет два варианта вывода: компактный и форматированный.

Автор:  22 часа назад