Arbeiten mit JSON in Kotlin: Parsen und Serialisieren von Daten

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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}

Blogs

Buchempfehlungen