Arbeiten mit YAML in Kotlin: Bibliotheken und Beispiele

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: Überblick über Bibliotheken und Anwendungsbeispiele

\n\n

YAML (YAML Ain't Markup Language) ist ein praktisches Daten-Serialisierungsformat, das häufig für Konfigurationsdateien, API-Spezifikationen (OpenAPI) und Datenaustausch verwendet wird. Im Kotlin-Ökosystem gibt es mehrere ausgereifte Bibliotheken für die Arbeit mit YAML, jede mit ihren eigenen Besonderheiten. In diesem Artikel betrachten wir drei Hauptansätze: die Verwendung von SnakeYAML, kaml und kotlinx.serialization mit dem YAML-Format.

\n\n

1. SnakeYAML — klassischer Parser für die JVM

\n\n

SnakeYAML ist die beliebteste Java-Bibliothek für die Arbeit mit YAML, die vollständig mit Kotlin kompatibel ist. Sie bietet eine Low-Level-API zum Parsen und Erstellen von YAML-Dokumenten.

\n\n

Einbindung

\n

Fügen Sie die Abhängigkeit in build.gradle.kts hinzu:

\n
implementation("org.yaml:snakeyaml:2.2")
\n\n

Beispiel: YAML lesen

\n

Betrachten wir die Datei config.yaml:

\n
server:\n  host: localhost\n  port: 8080\ndatabase:\n  url: jdbc:postgresql://localhost/mydb\n  user: admin\n  password: secret
\n\n

Code zum Parsen:

\n
import org.yaml.snakeyaml.Yaml\nimport java.io.File\n\nfun main() {\n    val yaml = Yaml()\n    val inputStream = File("config.yaml").inputStream()\n    val data: Map<String, Any> = yaml.load(inputStream)\n\n    val server = data["server"] as Map<String, Any>\n    println("Host: ${server["host"]}")\n    println("Port: ${server["port"]}")\n\n    val db = data["database"] as Map<String, Any>\n    println("DB-URL: ${db["url"]}")\n}
\n\n

Beispiel: YAML erstellen

\n
fun createYaml() {\n    val data = mapOf(\n        "appName" to "MyApp",\n        "version" to "1.0.0",\n        "features" to listOf("auth", "logging", "metrics")\n    )\n\n    val yaml = Yaml()\n    val writer = FileWriter("output.yaml")\n    yaml.dump(data, writer)\n    writer.close()\n}
\n\n

Vorteile von SnakeYAML:

\n
    \n
  • Maximale Kompatibilität mit Java-Projekten
  • \n
  • Unterstützung aller YAML 1.1-Funktionen (Anker, Tags, benutzerdefinierte Typen)
  • \n
  • Flexible Konfiguration über DumperOptions
  • \n
\n\n

Nachteile:

\n
    \n
  • Arbeitet mit rohen Typen Map<String, Any> — Typumwandlung erforderlich
  • \n
  • Unterstützt Kotlin-Datenklassen nicht "out of the box"
  • \n
\n\n

2. kaml — Bibliothek für Kotlin mit Unterstützung für Datenklassen

\n\n

kaml ist ein Wrapper um SnakeYAML, der die Deserialisierung in Kotlin-Datenklassen und die Serialisierung aus diesen unterstützt. Die Bibliothek verwendet Kotlin-Reflexion für automatisches Mapping.

\n\n

Einbindung

\n
implementation("net.mamoe.yamlkt:yamlkt:0.13.0")
\n\n

Beispiel: Deserialisierung in eine Datenklasse

\n
import net.mamoe.yamlkt.Yaml\nimport net.mamoe.yamlkt.YamlElement\n\ndata class ServerConfig(\n    val host: String,\n    val port: Int\n)\n\ndata class AppConfig(\n    val server: ServerConfig,\n    val debug: Boolean = false\n)\n\nfun main() {\n    val yaml = Yaml()\n    val input = """\n        server:\n          host: "0.0.0.0"\n          port: 8080\n        debug: true\n    """.trimIndent()\n\n    val config = yaml.decodeFromString(AppConfig.serializer(), input)\n    println("Server: ${config.server.host}:${config.server.port}")\n    println("Debug-Modus: ${config.debug}")\n}
\n\n

Beispiel: Serialisierung

\n
fun serializeConfig() {\n    val config = AppConfig(\n        server = ServerConfig("localhost", 9090),\n        debug = false\n    )\n\n    val yaml = Yaml()\n    val output = yaml.encodeToString(AppConfig.serializer(), config)\n    println(output)\n}
\n\n

Vorteile von kaml:

\n
    \n
  • Typsicherheit — Arbeit mit Kotlin-Datenklassen

Empfehlungen