Trabajo con YAML en Java: bibliotecas SnakeYAML y Jackson

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con YAML en Java: descripción general de bibliotecas y ejemplos de uso



YAML (YAML Ain't Markup Language) es un formato de serialización de datos que se utiliza a menudo para archivos de configuración debido a su legibilidad. En Java, se utilizan dos bibliotecas principales para trabajar con YAML: SnakeYAML (ligera, rápida) y Jackson YAML (potente, con soporte de anotaciones). En este artículo, analizaremos ambas bibliotecas en detalle, mostraremos ejemplos de lectura, escritura y serialización de objetos.



1. Biblioteca SnakeYAML



SnakeYAML es la biblioteca más popular para trabajar con YAML en Java. Admite la sintaxis completa de YAML 1.1, incluyendo etiquetas, anclas y tipos personalizados. Las principales características son:

  • Lectura de YAML en Map, List u objetos Java personalizados
  • Escritura de objetos Java en YAML
  • Soporte de estructuras recursivas
  • Bajo consumo de memoria


Conexión de SnakeYAML (Maven)

<dependency>    <groupId>org.yaml</groupId>    <artifactId>snakeyaml</artifactId>    <version>2.2</version></dependency>


Lectura de un archivo YAML

Consideremos un ejemplo del archivo YAML config.yaml:

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


Código Java para la lectura:

import org.yaml.snakeyaml.Yaml;import java.io.InputStream;import java.util.Map;

public class SnakeYamlReader { public static void main(String[] args) { Yaml yaml = new Yaml(); try (InputStream in = SnakeYamlReader.class .getClassLoader() .getResourceAsStream("config.yaml")) { Map<String, Object> data = yaml.load(in); System.out.println("Server host: " + ((Map<String, Object>) data.get("server")).get("host")); } catch (Exception e) { e.printStackTrace(); } }}


Escritura en YAML

import org.yaml.snakeyaml.Yaml;import java.util.Map;import java.util.LinkedHashMap;

public class SnakeYamlWriter { public static void main(String[] args) { Map<String, Object> data = new LinkedHashMap<>(); Map<String, Object> server = new LinkedHashMap<>(); server.put("host", "127.0.0.1"); server.put("port", 9090); data.put("server", server);

Yaml yaml = new Yaml(); String output = yaml.dump(data); System.out.println(output); }}


2. Biblioteca Jackson YAML



Jackson YAML es un módulo para Jackson que agrega soporte para el formato YAML. Las principales ventajas son:

  • Integración completa con las anotaciones de Jackson (@JsonProperty, @JsonIgnore)
  • Trabajo con objetos POJO sin necesidad de Map adicionales
  • Alto rendimiento gracias al procesamiento por flujo
  • Soporte de YAML 1.1 y parcialmente 1.2


Conexión de Jackson YAML (Maven)

<dependency>    <groupId>com.fasterxml.jackson.dataformat</groupId>    <artifactId>jackson-dataformat-yaml</artifactId>    <version>2.16.1</version></dependency>


Serialización de POJO en YAML

Crearemos una clase para la configuración:

import com.fasterxml.jackson.annotation.JsonProperty;

public class AppConfig { @JsonProperty("server") private ServerConfig server; @JsonProperty("database") private DatabaseConfig database; // getters y setters public ServerConfig getServer() { return server; } public void setServer(ServerConfig server) { this.server = server; } public DatabaseConfig getDatabase() {

Recommendations