Arbeiten mit YAML in Kotlin: Bibliotheken, Beispiele und Parsing

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

Arbeiten mit YAML in Kotlin: Bibliotheken, Parsing und Serialisierung



YAML (YAML Ain't Markup Language) ist ein beliebtes Daten-Serialisierungsformat, das häufig für Konfigurationsdateien, Abhängigkeitsbeschreibungen und Datenaustausch verwendet wird. Aufgrund seiner Lesbarkeit und Prägnanz wird YAML oft JSON oder XML vorgezogen. Im Kotlin-Ökosystem gibt es mehrere ausgereifte Bibliotheken für die Arbeit mit YAML. In diesem Artikel betrachten wir drei Hauptansätze: SnakeYAML, Kaml und Jackson YAML.



1. SnakeYAML – die klassische Wahl



SnakeYAML ist die beliebteste Java-Bibliothek zum Parsen von YAML, die auch in Kotlin hervorragend funktioniert. Sie bietet eine Low-Level-API, mit der YAML als Map, List oder beliebige Objekte gelesen werden kann.



Einbindung (Gradle)

dependencies {    implementation("org.yaml:snakeyaml:2.2")}


Beispiel: Einfaches YAML lesen

import org.yaml.snakeyaml.Yaml

fun main() { val yamlString = """ server: host: "localhost" port: 8080 ssl: false database: url: "jdbc:postgresql://localhost/mydb" user: "admin" password: "secret" """.trimIndent()

val yaml = Yaml() val data: Map<String, Any> = yaml.load(yamlString) println(data) // Ausgabe: {server={host=localhost, port=8080, ssl=false}, database={url=jdbc:postgresql://localhost/mydb, user=admin, password=secret}}}


Beispiel: Mapping auf data class

import org.yaml.snakeyaml.Yamlimport org.yaml.snakeyaml.constructor.Constructor

data class ServerConfig( val host: String, val port: Int, val ssl: Boolean)

data class DatabaseConfig( val url: String, val user: String, val password: String)

data class AppConfig( val server: ServerConfig, val database: DatabaseConfig)

fun main() { val yamlString = """ server: host: "localhost" port: 8080 ssl: false database: url: "jdbc:postgresql://localhost/mydb" user: "admin" password: "secret" """.trimIndent()

val yaml = Yaml(Constructor(AppConfig::class.java)) val config: AppConfig = yaml.load(yamlString) println(config.server.host) // localhost println(config.database.port) // Fehler! port ist nicht in DatabaseConfig vorhanden}


Wichtig: SnakeYAML verwendet Java-Reflexion, daher müssen data classes entweder einen parameterlosen Konstruktor haben oder Constructor mit Angabe der Klasse verwenden. Für verschachtelte Strukturen kann eine manuelle Konfiguration erforderlich sein.



2. Kaml – native Kotlin-Bibliothek



Kaml (Kotlin YAML library) ist eine moderne Bibliothek, die in Kotlin mit kotlinx.serialization geschrieben wurde. Sie bietet Typsicherheit, Unterstützung für sealed classes, nullable-Felder und benutzerdefinierte Serialisierer.



Einbindung (Gradle)

dependencies {    implementation("net.mamoe.yamlkt:yamlkt:0.13.0")    // oder    implementation("com.charleskorn.kaml:kaml:0.56.0")}


Wir betrachten Kaml von charleskorn, da es populärer ist und aktiv weiterentwickelt wird.



Beispiel: Serialisierung und Deserialisierung

import kotlinx.serialization.Serializableimport kotlinx.serialization.encodeToStringimport kotlinx.serialization.decodeFromStringimport com.charleskorn.kaml.Yaml

@Serializabledata class ServerConfig( val host: String = "localhost", val port: Int = 8080, val ssl: Boolean = false)

@Serializabledata class AppConfig( val server: ServerConfig, val name: String)

fun main() { val config = AppConfig( server = ServerConfig(host = "example.com", port = 443, ssl = true), name = "MyApp" )

// Serialisierung in YAML val yamlO

Empfehlungen