Trabalhando com YAML em Kotlin: bibliotecas, exemplos e parsing

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: bibliotecas, parsing e serialização



YAML (YAML Ain't Markup Language) é um formato popular de serialização de dados, amplamente utilizado para arquivos de configuração, descrição de dependências e troca de dados. Graças à sua legibilidade e concisão, o YAML é frequentemente preferido ao JSON ou XML. No ecossistema Kotlin, existem várias bibliotecas maduras para trabalhar com YAML. Neste artigo, abordaremos três abordagens principais: SnakeYAML, Kaml e Jackson YAML.



1. SnakeYAML — a escolha clássica



SnakeYAML é a biblioteca Java mais popular para parsing de YAML, que funciona muito bem também em Kotlin. Ela fornece uma API de baixo nível, permitindo ler YAML como Map, List ou objetos arbitrários.



Adicionando dependência (Gradle)

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


Exemplo: lendo um YAML simples

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


Exemplo: mapeamento para 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) // Erro! port não existe em DatabaseConfig}


Importante: SnakeYAML usa reflexão Java, portanto, data classes devem ter um construtor sem parâmetros ou usar Constructor especificando a classe. Para estruturas aninhadas, pode ser necessária configuração manual.



2. Kaml — biblioteca nativa Kotlin



Kaml (Kotlin YAML library) é uma biblioteca moderna escrita em Kotlin usando kotlinx.serialization. Ela oferece segurança de tipos, suporte a sealed class, campos nullable e serializadores personalizados.



Adicionando dependência (Gradle)

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


Vamos considerar o Kaml do charleskorn, pois é mais popular e ativamente desenvolvido.



Exemplo: serialização e desserialização

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

// Serialização para YAML val yamlO

Recommendations