Einführung in die Arbeit mit JSON in Kotlin
JSON (JavaScript Object Notation) ist eines der beliebtesten Formate für den Datenaustausch zwischen einem Server und einem Client. In der modernen Kotlin-Entwicklung, sei es für Android-Anwendungen oder serverseitige Projekte, ist die Fähigkeit, effizient mit JSON zu arbeiten, eine wesentliche Fertigkeit. In diesem Artikel werden wir gründlich untersuchen, wie man JSON-Parsing und -Serialisierung in Kotlin mit den beliebtesten Bibliotheken durchführt: kotlinx.serialization und Gson.
Egal, ob Sie eine REST-API erstellen, Antworten von externen Diensten verarbeiten oder lokale Einstellungen speichern – das Verständnis der Prinzipien der Arbeit mit JSON hilft Ihnen, saubereren und effizienteren Code zu schreiben.
Grundlagen des JSON-Parsings in Kotlin
Was sind Serialisierung und Deserialisierung?
Bevor wir zum Code übergehen, ist es wichtig, zwei Schlüsselkonzepte zu verstehen:
- Serialisierung — das Umwandeln eines Kotlin-Objekts (Datenklasse, Liste usw.) in einen JSON-String.
- Deserialisierung (Parsing) — der umgekehrte Prozess: Erstellen eines Kotlin-Objekts aus einem JSON-String.
Kotlin hat keine integrierte JSON-Unterstützung, daher verwenden wir Drittanbieter-Bibliotheken. Schauen wir uns die beiden beliebtesten an.
Die kotlinx.serialization-Bibliothek
kotlinx.serialization ist eine offizielle Bibliothek von JetBrains, die sich perfekt in die Kotlin-Sprache integriert. Sie arbeitet zur Kompilierzeit und gewährleistet hohe Leistung und Typsicherheit.
Hinzufügen der Bibliothek
Fügen Sie zunächst das Plugin zu build.gradle.kts hinzu:
plugins { kotlin("plugin.serialization") version "1.9.22"}
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}Definieren des Datenmodells
Erstellen wir eine Klasse zur Darstellung eines Benutzers:
import kotlinx.serialization.Serializable
@Serializabledata class User( val name: String, val age: Int, val email: String? = null, // nullable field val roles: List<String> = emptyList())Die Annotation @Serializable teilt dem Compiler mit, dass diese Klasse serialisiert werden kann.
Serialisierung (Objekt → JSON)
import kotlinx.serialization.encodeToStringimport kotlinx.serialization.json.Json
fun main() { val user = User( name = "Anna", age = 28, email = "anna@example.com", roles = listOf("admin", "user") )
val jsonString = Json.encodeToString(user) println(jsonString) // {"name":"Anna","age":28,"email":"anna@example.com","roles":["admin","user"]}}Deserialisierung (JSON → Objekt)
import kotlinx.serialization.decodeFromString
fun main() { val json = """{"name":"Ivan","age":35,"roles":["user"]}""" val user = Json.decodeFromString<User>(json) println(user.name) // Ivan println(user.email) // null (not specified in JSON)}Konfigurieren der JSON-Einstellungen
Sie können das Verhalten des Parsers anpassen:
val json = Json { prettyPrint = true // pretty formatting ignoreUnknownKeys = true // ignore extra fields in JSON isLenient = true // allow lenient parsing (e.g., quotes)}
val user = json.decodeFromString<User>(jsonString)Die Gson-Bibliothek
Gson von Google ist eine weitere beliebte Bibliothek, die besonders in der Android-Entwicklung verbreitet ist.
Gson hinzufügen
dependencies { implementation("com.google.code.gson:gson:2.10.1")}Anwendungsbeispiel
import com.google.gson.Gson
data class Product( val id: Int, val title: String, val price: Double)
fun main() { val gson = Gson() val product = Product(1, "Laptop", 999.99) // Serialisierung val json = gson.toJson(product) println(json) // {"id":1,"title":"Laptop","price":999.99} // Deserialisierung val jsonString = """{"id":2,"title":"Mouse","price":25.50}""" val parsedProduct = gson.fromJson(jsonString, Product::class.java) println(parsedProduct.title) // Mouse}