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: secretCó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
Também na biblioteca
Migrações de banco de dados em Swift: ferramentas e abordagens para iOS/macOS
Análise de HTML em C++: Visão geral das bibliotecas Gumbo, MyHTML e htmlcxx
Geração de relatórios PDF em PHP: visão geral de bibliotecas e ferramentas
Doctrine DBAL para PHP: guia completo com exemplos práticos
frozen para C++: guia completo com exemplos práticos