Trabajo con YAML en Java: bibliotecas SnakeYAML y Jackson
YAML (YAML Ain't Markup Language) es un formato de serialización de datos legible por humanos, utilizado a menudo para archivos de configuración, descripción de APIs e intercambio de datos. En el ecosistema de Java existen varias bibliotecas para trabajar con YAML, pero las más populares son SnakeYAML (analizador de bajo nivel) y Jackson YAML (solución de alto nivel con soporte de anotaciones). En este artículo, analizaremos en detalle ambas bibliotecas, sus capacidades y ejemplos de uso.
1. SnakeYAML — el analizador YAML clásico
SnakeYAML es una biblioteca simple y ligera que proporciona control total sobre el proceso de análisis. Soporta todas las especificaciones de YAML 1.1 y permite trabajar tanto con estructuras simples (Map, List) como con objetos personalizados.
Instalación de SnakeYAML
Si usas Maven, agrega la dependencia en pom.xml:
<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>2.2</version></dependency>Para Gradle:
implementation 'org.yaml:snakeyaml:2.2'Ejemplo: análisis de una cadena YAML en un 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); // Salida: {server={host=localhost, port=8080}, database={url=jdbc:mysql://localhost:3306/mydb, user=admin, password=secret}} }}Ejemplo: carga de YAML desde un archivo
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("Puerto: " + ((Map<String, Object>) data.get("server")).get("port")); } catch (Exception e) { e.printStackTrace(); } }}Ejemplo: serialización de un objeto Java a 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); // Salida: // features: // - YAML // - JSON // - XML // name: PythonLib // version: 2.0 }}Ventajas de SnakeYAML:
- API simple sin dependencias adicionales
- Soporte de tipos personalizados mediante constructores
- Configuración flexible del análisis (por ejemplo, ignorar campos desconocidos)
2. Jackson YAML — solución moderna con anotaciones
Jackson YAML es un módulo para la popular biblioteca Jackson que permite trabajar con YAML de la misma manera que con JSON. Soporta anotaciones (@JsonProperty, @JsonIgnore), vinculación automática con POJO y procesamiento en flujo.
Instalación de Jackson YAML
Maven:
También en la biblioteca
Serilog para C# (.NET): guía completa con ejemplos
Generación de PDF en Go (Golang): bibliotecas y ejemplos
Pruebas en Java: frameworks y herramientas para el desarrollador
Autorización y autenticación en Rust: bibliotecas y herramientas
Cliente Redis para Rust: descripción general de la biblioteca redis-rs
Recommendations