Guía
YAML 1.1 frente a 1.2
El error de YAML más caro de todos tiene un código de país en el centro.
Por yamltojsonfree · Publicado el · Actualizado el
Qué es el problema Norway
En YAML 1.1, las palabras sin comillas y, yes, on, n, no y off son booleanos — en mayúsculas, minúsculas o capitalizadas. Así que una lista de códigos de país que contenga Noruega — NO — se convierte silenciosamente en false. Nada falla. El documento se analiza, el despliegue tiene éxito, y en algún punto más adelante falta un país en una lista porque un booleano no puede ser clave de un diccionario ni coincidir con una comparación de cadenas.
YAML 1.2, publicado en 2009, eliminó esto: solo true y false son booleanos, y esas seis palabras son cadenas normales. También descartó las otras conversiones implícitas de YAML 1.1 — 022 ya no es el octal de 18, y 12:30 ya no es un número en base 60 que vale 750.
La pega es que ambas versiones siguen muy extendidas, más de quince años después. El mismo archivo puede por tanto significar dos cosas distintas según qué herramienta lo abra — exactamente por eso el conversor de YAML a JSON de este sitio usa YAML 1.2 por defecto y marca cada valor de tu documento que se leería de forma diferente en 1.1.
Todos los valores que cambian de significado
La misma fuente, leída por cada versión de la especificación.
| Fuente YAML | Leído como YAML 1.2 | Leído como YAML 1.1 | Forma segura |
|---|---|---|---|
| country: NO | "NO" | false | country: "NO" |
| enabled: yes | "yes" | true | enabled: true |
| debug: off | "off" | false | debug: false |
| mode: 022 | 22 | 18 | mode: "022" |
| start: 12:30 | "12:30" | 750 | start: "12:30" |
| version: 1.10 | 1.1 | 1.1 | version: "1.10" |
Fíjate en la última fila: 1.10 pierde el cero final en ambas versiones, porque se analiza como número. Las cadenas de versión deberían ir siempre entre comillas.
Qué analizadores leen qué versión
Rara vez eliges una versión de YAML directamente — la heredas de la biblioteca que use tu herramienta. Así se divide aproximadamente el ecosistema:
| Analizador | Versión | Notas |
|---|---|---|
| PyYAML (Python) | YAML 1.1 | El predeterminado de la mayoría de herramientas Python, incluido Ansible. |
| ruamel.yaml (Python) | YAML 1.2 | El sucesor mantenido de PyYAML; 1.1 disponible como opción. |
| js-yaml v5 (JavaScript) | YAML 1.2 | El motor que usa este sitio. Las versiones anteriores leían 1.1. |
| go-yaml / sigs.k8s.io (Go) | Mayormente 1.2 | Lo que usa Kubernetes; conserva algunos comportamientos de 1.1 por compatibilidad. |
| SnakeYAML (Java) | YAML 1.1 | El predeterminado al cargar configuración en Spring Boot. |
| libyaml (C bindings) | YAML 1.1 | La base de muchos bindings de lenguajes, PyYAML incluido. |
La consecuencia práctica: un archivo escrito en un lado de esa tabla y leído en el otro puede cambiar valores en silencio. Si tu YAML lo produce Python y lo consume Kubernetes — una canalización muy común — cruza la frontera de versión. Los detalles a nivel de código están en la guía Convertir YAML a JSON en código.
Cómo escribir YAML seguro en ambas versiones
Tres hábitos eliminan toda esta clase de errores. Pon entre comillas cualquier cadena que pueda confundirse con otra cosa — códigos de país, números de versión, valores con ceros iniciales y cualquier cosa que contenga dos puntos. Escribe los booleanos solo como true y false, nunca yes, on o sus parientes. Y antes de que un archivo pase de una herramienta a otra, pásalo por un conversor o validador que informe de los valores dependientes de la versión — ver tu YAML como JSON explícito es la forma más rápida de detectar un tipo que no pretendías.
Referencias
- Especificación YAML 1.1 (2005) — las formas booleana, octal y sexagesimal descritas arriba
- Especificación YAML 1.2.2 — el esquema core que limita los booleanos a true y false
- Tipo booleano de YAML 1.1 — la lista completa de palabras que YAML 1.1 lee como booleanos
- Documentación de PyYAML — comportamiento de YAML 1.1 en Python
- Documentación de ruamel.yaml — YAML 1.2 por defecto, 1.1 como opción
- js-yaml — el motor YAML 1.2 que usa este sitio
- sigs.k8s.io/yaml — la biblioteca de Go que usa Kubernetes
Todas las herramientas
YAML a JSON
Convertidor YAML a JSON online: formateado, minificado, privado y con errores en la línea exacta.
AbrirJSON a YAML
Convierte JSON a YAML legible con control de sangría, orden de claves y salida lista para copiar.
AbrirValidador YAML
Valida YAML online y revisa sintaxis, indentación, tabulaciones y claves duplicadas.
AbrirFormateador YAML
Formatea, embellece y reindenta YAML con sangría consistente y comentarios conservados.
Abrir