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 Auch in der Bibliothek
Prometheus-Metriken in Rust: Die Bibliotheken prometheus und metrics-exporter-prometheus
HTML-Parsing in Rust: Bibliotheken und Beispiele für Web Scraping
Arbeiten mit CSV in C# (.NET): Bibliotheken und Beispiele
Aufgabenwarteschlangen für Kotlin: Coroutines und KJobQueue