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:

JSON
{
  "server": {
    "host": "localhost",
    "port": 8080,
    "debug": true
  },
  "database": {
    "url": "postgres://localhost/mydb",
    "pool": 10
  }
}
YAML
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

FormatoLegibilidadComentariosArraysMejor para
JSON★★★☆☆Sin comentariosNativoAPIs, intercambio de datos
YAML★★★★★Sí (#)NativoArchivos de config, IaC
TOML★★★★☆Sí (#)NativoConfig de app (Rust, Python)
XML★★☆☆☆Sí (<!-- -->)Elementos repetidosDocumentos, 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 problema de Noruega

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.

Sensibilidad a la sangría

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.

Coerción de tipos implícita

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.

Las tabulaciones están prohibidas

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.

Modos de cadena multilínea

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.

Bucles de ancla/alias

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

Configuración de CI/CD

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.

Manifiestos de Kubernetes

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.

Procesamiento de respuestas de API

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.

Migración de configuración

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.

Flujo de validación de esquema

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.

Intercambio de datos con APIs

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

¿Es YAML un superconjunto de JSON?

Sí. YAML 1.2 es un superconjunto estricto de JSON — cualquier documento JSON válido es también YAML válido.

¿Por qué elegiría YAML sobre JSON para archivos de configuración?

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.

¿Qué es TOML y cuándo debo usarlo?

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).

¿La conversión de JSON a YAML pierde información?

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.

¿Qué causa que aparezca 'undefined' en la salida JSON?

JSON.stringify convierte los valores undefined a null en arrays y los omite de los objetos.

¿Puedo usar JSON en un archivo YAML?

Sí. Como YAML es un superconjunto de JSON, puedes incrustar sintaxis JSON directamente dentro de un documento YAML.