Travailler avec YAML en Kotlin : bibliothèques, exemples et parsing

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec YAML en Kotlin : bibliothèques, parsing et sérialisation



YAML (YAML Ain't Markup Language) est un format de sérialisation de données populaire, largement utilisé pour les fichiers de configuration, la description des dépendances et l'échange de données. Grâce à sa lisibilité et sa concision, YAML est souvent préféré à JSON ou XML. Dans l'écosystème Kotlin, il existe plusieurs bibliothèques matures pour travailler avec YAML. Dans cet article, nous examinerons trois approches principales : SnakeYAML, Kaml et Jackson YAML.



1. SnakeYAML — le choix classique



SnakeYAML est la bibliothèque Java la plus populaire pour le parsing YAML, qui fonctionne parfaitement également en Kotlin. Elle fournit une API de bas niveau permettant de lire YAML sous forme de Map, List ou d'objets arbitraires.



Ajout de la dépendance (Gradle)

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


Exemple : lecture d'un YAML simple

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) // Affichage : {server={host=localhost, port=8080, ssl=false}, database={url=jdbc:postgresql://localhost/mydb, user=admin, password=secret}}}


Exemple : mappage vers une 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) // Erreur ! port n'existe pas dans DatabaseConfig}


Important : SnakeYAML utilise la réflexion Java, donc les data class doivent avoir un constructeur sans paramètres ou utiliser Constructor avec spécification de la classe. Pour les structures imbriquées, une configuration manuelle peut être nécessaire.



2. Kaml — une bibliothèque Kotlin native



Kaml (Kotlin YAML library) est une bibliothèque moderne écrite en Kotlin utilisant kotlinx.serialization. Elle offre la sécurité des types, la prise en charge des sealed class, des champs nullable et des sérialiseurs personnalisés.



Ajout de la dépendance (Gradle)

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


Examinons Kaml de charleskorn, car il est plus populaire et activement développé.



Exemple : sérialisation et désérialisation

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" )

// Sérialisation en YAML val yamlO

Recommendations