Einleitung: Warum JSON die Grundlage moderner Kotlin-Entwicklung ist
JSON (JavaScript Object Notation) bleibt der De-facto-Standard für den Datenaustausch zwischen Server und Client, sei es eine mobile App auf Android oder ein Backend mit Ktor. Im Kotlin-Ökosystem ist die Arbeit mit JSON dank der strengen Typisierung der Sprache und leistungsstarker Serialisierungsbibliotheken besonders komfortabel. In diesem Artikel betrachten wir zwei Hauptansätze: die Verwendung der offiziellen Bibliothek kotlinx.serialization und der beliebten Gson. Sie erfahren, wie Sie komplexe Strukturen parsen, Objekte serialisieren und Ausnahmen in der Praxis behandeln.
Projektvorbereitung und Einbindung von Abhängigkeiten
Bevor wir Code schreiben, müssen die Bibliotheken in die Datei build.gradle.kts (für Gradle) eingefügt werden. Betrachten wir beide Varianten.
Variante 1: kotlinx.serialization (empfohlen)
- Fügen Sie das Plugin in
pluginshinzu:kotlin("plugin.serialization") version "1.9.22" - Geben Sie in
dependenciesan:implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")
Variante 2: Gson (für Kompatibilität mit Java-Projekten)
- Fügen Sie in
dependencieshinzu:implementation("com.google.code.gson:gson:2.10.1")
// build.gradle.kts — vollständiges Beispiel für kotlinx.serializationplugins { kotlin("jvm") version "1.9.22" kotlin("plugin.serialization") version "1.9.22"}
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}JSON-Parsing in Kotlin: Vom Einfachen zum Komplexen
Parsing (Deserialisierung) ist die Umwandlung eines JSON-Strings in ein Kotlin-Objekt. Betrachten wir es am Beispiel von Benutzerdaten.
Beispieldaten
{ "id": 123, "name": "Anna", "email": "anna@example.com", "active": true}Erstellen einer Data Class
Für beide Bibliotheken wird dieselbe Klasse verwendet. Wichtig: Für kotlinx.serialization muss die Annotation @Serializable hinzugefügt werden.
import kotlinx.serialization.Serializable
@Serializabledata class User( val id: Int, val name: String, val email: String, val active: Boolean)Parsing mit kotlinx.serialization
import kotlinx.serialization.json.Json
fun parseWithKotlinx(jsonString: String): User { val json = Json { ignoreUnknownKeys = true } // unbekannte Felder ignorieren return json.decodeFromString<User>(jsonString)}
// Verwendung:fun main() { val json = """{"id":123,"name":"Anna","email":"anna@example.com","active":true}""" val user = parseWithKotlinx(json) println(user.name) // Anna}Parsing mit Gson
import com.google.gson.Gson
fun parseWithGson(jsonString: String): User { val gson = Gson() return gson.fromJson(jsonString, User::class.java)}
// Verwendung:fun main() { val json = """{"id":123,"name":"Anna","email":"anna@example.com","active":true}""" val user = parseWithGson(json) println(user.email) // anna@example.com}Serialisierung: Ein Objekt in JSON umwandeln
Der umgekehrte Prozess – das Erstellen eines JSON-Strings aus einem Objekt – ist ebenso wichtig für das Senden von Daten an den Server.
Serialisierung mit kotlinx.serialization
import kotlinx.serialization.encodeToString
fun serializeWithKotlinx(user: User): String { val json = Json { prettyPrint = true } return json.encodeToString(user)}
// Ergebnis:// {// "id": 123,// "name": "Anna",// "email": "anna@example.com",// "active": true// }Serialisierung mit Gson
fun serializeWithGson(user: User): String { val gson = GsonBuilder().setPrettyPrinting().create() return gson.toJson(user)}<