Trabalhando com YAML em Kotlin: bibliotecas e exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com YAML em Kotlin: visão geral das bibliotecas e exemplos de uso



YAML (YAML Ain't Markup Language) é um formato conveniente de serialização de dados, frequentemente usado para arquivos de configuração, descrição de especificações de API (OpenAPI) e troca de dados. No ecossistema Kotlin, existem várias bibliotecas maduras para trabalhar com YAML, cada uma com suas próprias características. Neste artigo, veremos três abordagens principais: uso de SnakeYAML, kaml e kotlinx.serialization com formato YAML.



1. SnakeYAML — parser clássico para JVM



SnakeYAML é a biblioteca Java mais popular para trabalhar com YAML, totalmente compatível com Kotlin. Ela fornece uma API de baixo nível para parsing e criação de documentos YAML.



Adicionando dependência

Adicione a dependência em build.gradle.kts:

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


Exemplo: leitura de YAML

Considere o arquivo config.yaml:

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


Código para parsing:

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("Porta: ${server["port"]}")

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


Exemplo: criação 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()}


Vantagens do SnakeYAML:

  • Máxima compatibilidade com projetos Java
  • Suporte a todos os recursos do YAML 1.1 (âncoras, tags, tipos personalizados)
  • Configuração flexível através de DumperOptions


Desvantagens:

  • Trabalha com tipos brutos Map<String, Any> — requer conversão de tipos
  • Não suporta data-classes do Kotlin "prontas para uso"


2. kaml — biblioteca para Kotlin com suporte a data-classes



kaml é um wrapper sobre SnakeYAML que adiciona suporte para desserialização em data-classes Kotlin e serialização a partir delas. A biblioteca usa reflexão do Kotlin para mapeamento automático.



Adicionando dependência

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


Exemplo: desserialização em 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 de depuração: ${config.debug}")}


Exemplo: serialização

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

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


Vantagens do kaml:

  • Segurança de tipos — trabalha com data-classes Kot

Recommendations