YAML
1 tools
Formatos de serialización de datos
La serialización de datos es el proceso de convertir datos estructurados a un formato que puede almacenarse o transmitirse y luego reconstruirse. Los diferentes formatos hacen compromisos distintos entre legibilidad humana, capacidad de análisis, expresividad y tamaño de archivo.
JSON, YAML, TOML y XML son los cuatro formatos de serialización basados en texto dominantes en el desarrollo de software. Cada uno tiene fortalezas que lo hacen la mejor opción para contextos específicos.
JSON y YAML lado a lado
JSON y YAML representan el mismo modelo de datos. YAML es un superconjunto estricto de JSON — cualquier documento JSON válido es también YAML válido. A continuación, la misma configuración en ambos formatos:
{
"server": {
"host": "localhost",
"port": 8080,
"debug": true
},
"database": {
"url": "postgres://localhost/mydb",
"pool": 10
}
}server: host: localhost port: 8080 debug: true database: url: postgres://localhost/mydb pool: 10
YAML usa sangría en lugar de llaves y corchetes, y omite comillas en la mayoría de los valores de cadena. Esto lo hace más compacto y legible para archivos editados por humanos, pero introduce sensibilidad a la sangría.
Comparación de formatos
| Formato | Legibilidad | Comentarios | Arrays | Mejor para |
|---|---|---|---|---|
| JSON | ★★★☆☆ | Sin comentarios | Nativo | APIs, intercambio de datos |
| YAML | ★★★★★ | Sí (#) | Nativo | Archivos de config, IaC |
| TOML | ★★★★☆ | Sí (#) | Nativo | Config de app (Rust, Python) |
| XML | ★★☆☆☆ | Sí (<!-- -->) | Elementos repetidos | Documentos, SOAP, SVG |
Problemas conocidos de YAML
YAML es potente pero tiene casos especiales bien conocidos que sorprenden a los desarrolladores. Estos son los más comunes:
El valor bare 'NO' se interpreta como booleano false en YAML 1.1. Códigos de país como NO (Noruega), OFF, FALSE, N se analizan como false. En YAML 1.2 esto está corregido, pero muchos analizadores aún usan reglas 1.1. Siempre usa comillas en cadenas ambiguas.
YAML usa sangría para definir la estructura. Un espacio adicional o un carácter de tabulación puede cambiar completamente el significado del documento. Las tabulaciones están prohibidas en YAML — solo espacios.
Los valores que parecen números, booleanos o null se convierten automáticamente. '1.0' se convierte en flotante, '2024-01-01' en objeto de fecha en algunos analizadores. Usa comillas para los valores que quieres mantener como cadenas.
La especificación YAML prohíbe explícitamente el uso de tabulaciones para la sangría. Los editores que auto-convierten espacios a tabulaciones romperán silenciosamente tu archivo YAML.
YAML tiene dos indicadores de cadena multilínea: | (bloque literal, preserva saltos de línea) y > (bloque plegado, convierte saltos de línea en espacios). Confundirlos produce silenciosamente una salida incorrecta.
Las anclas YAML (&) y alias (*) permiten reutilizar nodos, pero pueden crear referencias circulares que causan bucles infinitos en analizadores ingenuos.
Características únicas de YAML
Comentarios
YAML admite comentarios con el carácter #. Esta es una de las mayores ventajas prácticas sobre JSON para archivos de configuración — puedes documentar tu configuración en línea.
Anclas y alias
YAML te permite definir un nodo una vez con &nombre-de-ancla y reutilizarlo en cualquier lugar con *nombre-de-ancla. Esto elimina la repetición en configuraciones complejas.
Cadenas multilínea
YAML admite escalares de bloque con dos modos: el bloque literal (|) preserva los saltos de línea exactamente como están escritos; el bloque plegado (>) convierte los saltos de línea en espacios.
Cuándo necesitas convertir
GitHub Actions, GitLab CI y CircleCI usan YAML nativamente. Al generar configuraciones de pipeline programáticamente, a menudo es más fácil construir un objeto JSON y convertirlo a YAML.
Los recursos de Kubernetes se definen en YAML, pero algunas herramientas producen JSON. Convertir entre formatos te permite inspeccionar respuestas de API y usar herramientas JSON estándar.
Las APIs REST devuelven JSON. Al alimentar esos datos a sistemas de configuración basados en YAML (Ansible, Salt, Kubernetes), un convertidor une el gap.
Migrar de una herramienta a otra a menudo significa convertir su formato de configuración. Convertir entre JSON y YAML permite moverse entre ecosistemas rápidamente.
Las herramientas de JSON Schema son más maduras. Un patrón común es crear configuración en YAML para legibilidad, convertir a JSON para validación, y volver a convertir para despliegue.
Las herramientas internas pueden consumir configuraciones YAML mientras las APIs externas requieren JSON. Un convertidor en el pipeline de construcción mantiene ambas representaciones sincronizadas.
Preguntas frecuentes
Sí. YAML 1.2 es un superconjunto estricto de JSON — cualquier documento JSON válido es también YAML válido.
YAML admite comentarios, que JSON no tiene. YAML también es más compacto para estructuras profundamente anidadas. Estas dos propiedades lo hacen preferido para archivos de configuración editados por humanos.
TOML (Tom's Obvious Minimal Language) está diseñado para archivos de configuración. Tiene una sintaxis clara, similar a INI, con tipos explícitos. Es el estándar para Rust (Cargo.toml) y Python (pyproject.toml).
Raramente. JSON preserva el orden de claves en la mayoría de los analizadores. YAML admite anclas y etiquetas que no tienen equivalente en JSON.
JSON.stringify convierte los valores undefined a null en arrays y los omite de los objetos.
Sí. Como YAML es un superconjunto de JSON, puedes incrustar sintaxis JSON directamente dentro de un documento YAML.