Pre vytváranie a parsovanie JSON do a z Kotlin objektov existuje viacero ciest. Viacero z nich je naviazaných na JVM (Java Virtual Machine), preto si teraz ukážeme multiplatformové riešenie pomocou Kotlinx serialization.
Knižnicu pre kotlinx serialization som už spomínal pri navigácii v JetPack Compose. Poďme sa ale pozrieť na importovanie
tejto knižnice. V súbore app/build.gradle.kts pridáme gradle plugin a závislosť:
plugins {
kotlin("plugin.serialization") version "2.4.10"
}
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.11.0")
}
Túto knižnicu potom môžeme použiť pre priame parsovanie JSON do Kotlin objektov a naopak. Najprv si definujeme serializovateľné dátové triedy:
@Serializable
data class Classroom(
val classroomId: Int,
val name: String,
val teachers: List<Teacher>
)
@Serializable
data class Teacher(
val teacherId: Int,
val name: String,
)
val classroom = Classroom(
classroomId = 1,
name = "Classroom 1",
teachers = listOf(
Teacher(teacherId = 1, name = "Teacher 1"),
Teacher(teacherId = 2, name = "Teacher 2"),
),
)
Ak si z tejto triedy vytvoríme objekt, vieme ho previesť na JSON String pomocou Json.encodeToString:
val classroom = Classroom(
classroomId = 1,
name = "Classroom 1",
teachers = listOf(
Teacher(teacherId = 1, name = "Teacher 1"),
Teacher(teacherId = 2, name = "Teacher 2"),
),
)
println(Json.encodeToString(classroom))
// output: {"classroomId":1,"name":"Classroom 1","teachers":[{"teacherId":1,"name":"Teacher 1"},{"teacherId":2,"name":"Teacher 2"}]}
A naopak, pomocou Json.decodeFromString môžeme JSON String previesť na Kotlin objekt:
val example = """
{
"classroomId": 1,
"name": "Classroom 1",
"teachers" : [
{"teacherId": 1,"name": "Teacher 1"},
{"teacherId": 2,"name": "Teacher 2"}
]
}
"""
println(Json.decodeFromString<Classroom>(example))
// output: Classroom(classroomId=1, name=Classroom 1, teachers=[Teacher(teacherId=1, name=Teacher 1), Teacher(teacherId=2, name=Teacher 2)])
V praxi väčšinou priamo nepoužívame Json.encodeToString alebo Json.decodeFromString. Ak totiž pracujeme s JSON, tak
ide väčšinou o prácu s REST API. A pre prácu s REST API používame pomocné knižnice. Tie používajú serializáciu a
deserializáciu na pozadí.
Existujú ale výnimky, ktorým sa obvykle vyhýbam: