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: secretCó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
También en la biblioteca
Tokens JWT en PHP: biblioteca firebase/php-jwt y guía completa
Integración de métricas Prometheus en aplicaciones C++: biblioteca prometheus-cpp
Cliente Redis para Kotlin: Lettuce y Kreds — comparación y ejemplos