Travailler avec YAML en Kotlin : aperçu des bibliothèques et exemples d'utilisation
\n\nYAML (YAML Ain't Markup Language) est un format pratique de sérialisation de données, souvent utilisé pour les fichiers de configuration, la description de spécifications API (OpenAPI) et l'échange de données. Dans l'écosystème Kotlin, il existe plusieurs bibliothèques matures pour travailler avec YAML, chacune ayant ses propres caractéristiques. Dans cet article, nous examinerons trois approches principales : l'utilisation de SnakeYAML, kaml et kotlinx.serialization avec le format YAML.
\n\n1. SnakeYAML — analyseur classique pour JVM
\n\nSnakeYAML est la bibliothèque Java la plus populaire pour travailler avec YAML, entièrement compatible avec Kotlin. Elle fournit une API de bas niveau pour l'analyse et la création de documents YAML.
\n\nAjout de la dépendance
\nAjoutez la dépendance dans build.gradle.kts :
implementation("org.yaml:snakeyaml:2.2")\n\nExemple : lecture de YAML
\nConsidérons le fichier config.yaml :
server:\n host: localhost\n port: 8080\ndatabase:\n url: jdbc:postgresql://localhost/mydb\n user: admin\n password: secret\n\nCode pour l'analyse :
\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("Hôte : ${server["host"]}")\n println("Port : ${server["port"]}")\n\n val db = data["database"] as Map<String, Any>\n println("URL de la BD : ${db["url"]}")\n}\n\nExemple : création de YAML
\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\nAvantages de SnakeYAML :
\n- \n
- Compatibilité maximale avec les projets Java \n
- Prise en charge de toutes les fonctionnalités de YAML 1.1 (ancres, balises, types personnalisés) \n
- Configuration flexible via
DumperOptions\n
Inconvénients :
\n- \n
- Fonctionne avec des types bruts
Map<String, Any>— nécessite un transtypage \n - Ne prend pas en charge les data-classes Kotlin "prêtes à l'emploi" \n
2. kaml — bibliothèque pour Kotlin avec prise en charge des data-classes
\n\nkaml est un wrapper autour de SnakeYAML qui ajoute la prise en charge de la désérialisation dans les data-classes Kotlin et de la sérialisation à partir de celles-ci. La bibliothèque utilise la réflexion Kotlin pour le mappage automatique.
\n\nAjout de la dépendance
\nimplementation("net.mamoe.yamlkt:yamlkt:0.13.0")\n\nExemple : désérialisation en data-classe
\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("Serveur : ${config.server.host}:${config.server.port}")\n println("Mode débogage : ${config.debug}")\n}\n\nExemple : sérialisation
\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\nAvantages de kaml :
\n- \n
- Sécurité des types — travail avec les data-classes Kot
Aussi dans la bibliothèque
Travailler avec XML en JavaScript (Node.js) : bibliothèques et exemples
HtmlAgilityPack C# (.NET) : guide complet avec exemples
Event Bus et le pattern Observer en PHP : implémentation et exemples
Travailler avec les images en Go (Golang) : bibliothèques et exemples