Arbeiten mit YAML in Kotlin: Überblick über Bibliotheken und Anwendungsbeispiele
\n\nYAML (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\n1. SnakeYAML — klassischer Parser für die JVM
\n\nSnakeYAML 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\nEinbindung
\nFügen Sie die Abhängigkeit in build.gradle.kts hinzu:
implementation("org.yaml:snakeyaml:2.2")\n\nBeispiel: YAML lesen
\nBetrachten wir die Datei config.yaml:
server:\n host: localhost\n port: 8080\ndatabase:\n url: jdbc:postgresql://localhost/mydb\n user: admin\n password: secret\n\nCode zum Parsen:
\nimport 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\nBeispiel: YAML erstellen
\nfun 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\nVorteile 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
Nachteile:
\n- \n
- Arbeitet mit rohen Typen
Map<String, Any>— Typumwandlung erforderlich \n - Unterstützt Kotlin-Datenklassen nicht "out of the box" \n
2. kaml — Bibliothek für Kotlin mit Unterstützung für Datenklassen
\n\nkaml 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\nEinbindung
\nimplementation("net.mamoe.yamlkt:yamlkt:0.13.0")\n\nBeispiel: Deserialisierung in eine Datenklasse
\nimport 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\nBeispiel: Serialisierung
\nfun 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\nVorteile von kaml:
\n- \n
- Typsicherheit — Arbeit mit Kotlin-Datenklassen
Auch in der Bibliothek
Wolverine für C# (.NET): Komplettguide mit Beispielen
deepkit/type für TypeScript: Komplettguide mit Beispielen
Lodash für JavaScript (Node.js): Vollständiger Leitfaden mit Beispielen
Caching in Java: Redis, Ehcache, Caffeine, Hazelcast – Überblick und Beispiele
Verarbeitung und Parsing von Markdown in PHP: Bibliotheken und Beispiele