Trabalhando com YAML em Java: bibliotecas SnakeYAML e Jackson
YAML (YAML Ain't Markup Language) é um formato de serialização de dados legível por humanos, frequentemente usado para arquivos de configuração, descrição de APIs e troca de dados. No ecossistema Java, existem várias bibliotecas para trabalhar com YAML, mas as mais populares são SnakeYAML (parser de baixo nível) e Jackson YAML (solução de alto nível com suporte a anotações). Neste artigo, abordaremos detalhadamente ambas as bibliotecas, seus recursos e exemplos de uso.
1. SnakeYAML — parser YAML clássico
SnakeYAML é uma biblioteca simples e leve que oferece controle total sobre o processo de parsing. Ela suporta todas as especificações do YAML 1.1 e permite trabalhar tanto com estruturas simples (Map, List) quanto com objetos personalizados.
Instalação do SnakeYAML
Se você usa Maven, adicione a dependência no pom.xml:
<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>2.2</version></dependency>Para Gradle:
implementation 'org.yaml:snakeyaml:2.2'Exemplo: parsing de string YAML em Map
import org.yaml.snakeyaml.Yaml;import java.util.Map;
public class SnakeYamlExample { public static void main(String[] args) { String yamlString = """ server: host: localhost port: 8080 database: url: jdbc:mysql://localhost:3306/mydb user: admin password: secret """;
Yaml yaml = new Yaml(); Map<String, Object> data = yaml.load(yamlString);
System.out.println(data); // Saída: {server={host=localhost, port=8080}, database={url=jdbc:mysql://localhost:3306/mydb, user=admin, password=secret}} }}Exemplo: carregar YAML de um arquivo
import org.yaml.snakeyaml.Yaml;import java.io.FileInputStream;import java.io.InputStream;import java.util.Map;
public class SnakeYamlFileExample { public static void main(String[] args) { try (InputStream input = new FileInputStream("config.yaml")) { Yaml yaml = new Yaml(); Map<String, Object> data = yaml.load(input); System.out.println("Porta: " + ((Map<String, Object>) data.get("server")).get("port")); } catch (Exception e) { e.printStackTrace(); } }}Exemplo: serialização de objeto Java em YAML
import org.yaml.snakeyaml.Yaml;import java.util.Map;
public class SnakeYamlDumpExample { public static void main(String[] args) { Map<String, Object> data = Map.of( "name", "PythonLib", "version", 2.0, "features", List.of("YAML", "JSON", "XML") );
Yaml yaml = new Yaml(); String output = yaml.dump(data); System.out.println(output); // Saída: // features: // - YAML // - JSON // - XML // name: PythonLib // version: 2.0 }}Vantagens do SnakeYAML:
- API simples sem dependências desnecessárias
- Suporte a tipos personalizados através de construtores
- Configuração flexível de parsing (por exemplo, ignorar campos desconhecidos)
2. Jackson YAML — solução moderna com anotações
Jackson YAML é um módulo para a popular biblioteca Jackson que permite trabalhar com YAML da mesma forma que com JSON. Ele suporta anotações (@JsonProperty, @JsonIgnore), vinculação automática com POJO e processamento em fluxo.
Instalação do Jackson YAML
Maven:
Também na biblioteca
Recommendations