Trabajo con YAML en Kotlin: bibliotecas y ejemplos

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: descripción general de bibliotecas y ejemplos de uso



YAML (YAML Ain't Markup Language) es un formato conveniente de serialización de datos, utilizado a menudo para archivos de configuración, descripción de especificaciones API (OpenAPI) e intercambio de datos. En el ecosistema de Kotlin existen varias bibliotecas maduras para trabajar con YAML, cada una con sus propias características. En este artículo, analizaremos tres enfoques principales: el uso de SnakeYAML, kaml y kotlinx.serialization con el formato YAML.



1. SnakeYAML — analizador clásico para JVM



SnakeYAML es la biblioteca Java más popular para trabajar con YAML, que es totalmente compatible con Kotlin. Proporciona una API de bajo nivel para analizar y crear documentos YAML.



Conexión

Agregue la dependencia en build.gradle.kts:

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


Ejemplo: lectura de YAML

Considere el archivo config.yaml:

server:  host: localhost  port: 8080database:  url: jdbc:postgresql://localhost/mydb  user: admin  password: secret


Código para el análisis:

import org.yaml.snakeyaml.Yamlimport java.io.File

fun main() { val yaml = Yaml() val inputStream = File("config.yaml").inputStream() val data: Map<String, Any> = yaml.load(inputStream)

val server = data["server"] as Map<String, Any> println("Host: ${server["host"]}") println("Puerto: ${server["port"]}")

val db = data["database"] as Map<String, Any> println("URL BD: ${db["url"]}")}


Ejemplo: creación de YAML

fun createYaml() {    val data = mapOf(        "appName" to "MyApp",        "version" to "1.0.0",        "features" to listOf("auth", "logging", "metrics")    )

val yaml = Yaml() val writer = FileWriter("output.yaml") yaml.dump(data, writer) writer.close()}


Ventajas de SnakeYAML:

  • Máxima compatibilidad con proyectos Java
  • Soporte de todas las capacidades de YAML 1.1 (anclas, etiquetas, tipos personalizados)
  • Configuración flexible a través de DumperOptions


Desventajas:

  • Trabaja con tipos sin procesar Map<String, Any> — se requiere conversión de tipos
  • No soporta data-classes de Kotlin "de fábrica"


2. kaml — biblioteca para Kotlin con soporte de data-classes



kaml es un envoltorio sobre SnakeYAML que agrega soporte para deserialización en data-classes de Kotlin y serialización desde ellas. La biblioteca utiliza la reflexión de Kotlin para el mapeo automático.



Conexión

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


Ejemplo: deserialización en data-class

import net.mamoe.yamlkt.Yamlimport net.mamoe.yamlkt.YamlElement

data class ServerConfig( val host: String, val port: Int)

data class AppConfig( val server: ServerConfig, val debug: Boolean = false)

fun main() { val yaml = Yaml() val input = """ server: host: "0.0.0.0" port: 8080 debug: true """.trimIndent()

val config = yaml.decodeFromString(AppConfig.serializer(), input) println("Servidor: ${config.server.host}:${config.server.port}") println("Modo depuración: ${config.debug}")}


Ejemplo: serialización

fun serializeConfig() {    val config = AppConfig(        server = ServerConfig("localhost", 9090),        debug = false    )

val yaml = Yaml() val output = yaml.encodeToString(AppConfig.serializer(), config) println(output)}


Ventajas de kaml:

  • Seguridad de tipos — trabajo con data-classes de Kot

Recommendations