Trabajo con YAML en Kotlin: bibliotecas, ejemplos y análisis

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con YAML en Kotlin: bibliotecas, análisis y serialización



YAML (YAML Ain't Markup Language) es un formato popular de serialización de datos que se utiliza ampliamente para archivos de configuración, descripción de dependencias e intercambio de datos. Gracias a su legibilidad y concisión, YAML a menudo se prefiere a JSON o XML. En el ecosistema de Kotlin, existen varias bibliotecas maduras para trabajar con YAML. En este artículo, analizaremos tres enfoques principales: SnakeYAML, Kaml y Jackson YAML.



1. SnakeYAML — la elección clásica



SnakeYAML es la biblioteca Java más popular para analizar YAML, que funciona muy bien también en Kotlin. Proporciona una API de bajo nivel que permite leer YAML como Map, List u objetos arbitrarios.



Inclusión (Gradle)

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


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


Ejemplo: mapeo a 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) // ¡Error! port no está en DatabaseConfig}


Importante: SnakeYAML utiliza reflexión de Java, por lo que las data class deben tener un constructor sin parámetros o usar Constructor especificando la clase. Para estructuras anidadas, puede ser necesaria una configuración manual.



2. Kaml — biblioteca nativa de Kotlin



Kaml (Kotlin YAML library) es una biblioteca moderna escrita en Kotlin que utiliza kotlinx.serialization. Proporciona seguridad de tipos, soporte para sealed class, campos nullable y serializadores personalizados.



Inclusión (Gradle)

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


Consideraremos Kaml de charleskorn, ya que es más popular y se desarrolla activamente.



Ejemplo: serialización y deserialización

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

// Serialización a YAML val yamlO

Recommendations