Formateador y validador de YAML
Pega YAML para formatearlo y validarlo. Visualiza los errores al instante, corrige la indentación y convierte a JSON.
¿Qué es YAML?
YAML (YAML Ain't Markup Language) es un formato de serialización de datos legible por humanos, utilizado para archivos de configuración (Docker, Kubernetes, GitHub Actions, Ansible), intercambio de datos y más. Utiliza indentación en lugar de llaves y es un superconjunto de JSON.
Preguntas frecuentes
¿Qué errores detecta el validador?
Errores de indentación, dos puntos faltantes, claves duplicadas, caracteres no válidos, cadenas sin cerrar, anidamientos incorrectos y otros problemas de sintaxis YAML. Los mensajes de error incluyen los números de línea.
¿Puedo convertir el YAML a JSON?
¡Sí! Haz clic en el botón «→ JSON» para convertir tu YAML a JSON bien formateado. Para la conversión inversa, usa nuestro Convertidor JSON a YAML.
Un recorrido rápido por YAML
YAML 1.0 fue publicado en 2001 por Clark Evans, Ingy döt Net y Oren Ben-Kiki; YAML 1.1 le siguió en 2005, y la versión actual es YAML 1.2.2, que corrigió varios problemas históricos (en especial el «problema de Noruega», véase más abajo) y se diseñó para ser un superconjunto estricto de JSON. La especificación oficial está en yaml.org/spec/1.2.2. Este formateador usa la biblioteca de código abierto js-yaml, que analiza con el esquema YAML 1.2 de forma predeterminada, así que la mayoría de las peculiaridades heredadas de la versión 1.1 no se aplican al texto formateado aquí, pero sí se aplican a la mayoría de las herramientas YAML del lado del servidor a las que enviarás la salida.
Dónde vive YAML en realidad
YAML se ha impuesto como el formato de configuración de la infraestructura nativa de la nube. Los lugares donde más te lo encontrarás:
- Manifiestos de Kubernetes: cada Pod, Deployment, Service, ConfigMap o Ingress es un documento YAML. Los charts de Helm son YAML envuelto en plantillas de Go.
- Flujos de trabajo de CI/CD: GitHub Actions, GitLab CI, CircleCI, Bitbucket Pipelines, Drone, Jenkinsfile (pipelines declarativos), Argo Workflows.
- Docker Compose: definiciones de aplicaciones multicontenedor.
- Playbooks de Ansible: el estándar de la gestión de configuración.
- Generadores de sitios estáticos: el
_config.ymlde Jekyll, elconfig.yamlde Hugo, los diversos archivos de configuración de Eleventy. - Especificaciones de OpenAPI: contratos de API REST, a menudo redactados como YAML y convertidos a JSON solo cuando hace falta.
- Configuración de aplicaciones: el
application.ymlde Spring Boot, las configuraciones de base de datos de Rails, muchos servicios de Python y Go.
La trampa de los espacios en blanco (solo espacios)
YAML usa la indentación para denotar la estructura, y la especificación es explícita en que no se permiten tabuladores para la indentación. Solo espacios. Esta es la fuente de errores más común en el YAML escrito a mano, sobre todo porque muchos editores mezclan tabuladores y espacios de forma silenciosa según su configuración. El mensaje de error que te dará un analizador estricto es algo parecido a «found character '\t' that cannot start any token»; traducción: «usaste un tabulador en algún sitio». La solución es universal: activa «mostrar espacios en blanco» en tu editor y convierte cada tabulador en dos o cuatro espacios.
El tamaño de la indentación es una convención, no parte de la especificación. 2 espacios es el estándar de facto para los manifiestos de Kubernetes, GitHub Actions y la mayor parte del YAML que leerás en la web moderna. 4 espacios es más habitual en Ansible. La regla que importa: sé coherente dentro de un mismo archivo. Mezclar 2 y 4 espacios entre claves hermanas es lo que hace tropezar a los analizadores, no el tamaño que elijas.
El problema de Noruega (y por qué deberías entrecomillar las cadenas ambiguas)
YAML 1.1 (todavía el predeterminado en PyYAML, snakeyaml y muchos otros analizadores del lado del servidor) interpreta una larga lista de grafías booleanas sin comillas como booleanos reales: true, True, TRUE, false, False, FALSE, yes, Yes, YES, no, No, NO, y, n, on, off. La trampa famosa: el código de país ISO de Noruega es NO. Una configuración YAML que enumera países como cadenas sin comillas analiza Noruega en silencio como el booleano false, y el código posterior que lee countries[0] == 'NO' falla de forma desconcertante.
YAML 1.2 (y el esquema predeterminado de js-yaml) restringió los booleanos a solo true / false, lo que corrige el problema de Noruega a nivel del analizador. Pero muchas herramientas del mundo real todavía usan el esquema YAML 1.1 de forma predeterminada por retrocompatibilidad. El hábito defensivo: entrecomilla cualquier cadena que parezca que podría ser un booleano, un número, una fecha o una versión. country: "NO", postal_code: "01234", version: "1.10", time: "10:30". Las comillas son el desambiguador universal.
Otras trampas de coerción de tipos
- Números sexagesimales (YAML 1.1). Un
10:30sin comillas se analiza como el entero 630 (diez por sesenta más treinta). Cualquier cosa que parezca una hora del día necesita comillas. - Números octales. Un
012sin comillas se analiza como el entero 10 en YAML 1.1 (interpretación octal de los números con cero a la izquierda). Los códigos postales de EE. UU., los identificadores de empleado y los códigos postales que empiezan por cero deben entrecomillarse:zip: "01234". - Números de versión como flotantes. Un
1.10sin comillas se analiza como el flotante1.1. Entrecomilla siempre las cadenas de versionado semántico:version: "1.10". - Notación científica.
1e5se analiza como el número 100.000. Si de verdad querías la cadena «1e5» (un código de producto, un identificador interno), entrecomíllala. - Enteros muy grandes. Los analizadores de YAML basados en JavaScript (incluido js-yaml) pueden perder precisión con enteros por encima de 253−1. Para los identificadores de 64 bits, transmítelos como cadenas.
Estilo de bloque frente a estilo de flujo
YAML admite dos notaciones para los mismos datos:
# Block style (the standard, indentation-based)
person:
name: Alice
tags:
- admin
- billing
# Flow style (JSON-like inline)
person: { name: Alice, tags: [admin, billing] }
El estilo de bloque es lo que verás en el 99 % del YAML escrito a mano: es lo que hace que el formato sea legible. El estilo de flujo es una vía de escape útil para valores cortos de una sola línea o para generar YAML mediante programación, cuando prefieres no llevar el control de la indentación. El formateador normaliza la salida a estilo de bloque (la forma más legible), con independencia del estilo que haya usado tu entrada.
Anclas y alias (el truco DRY)
La función de reutilización de YAML: define un valor una vez con el ancla &name y haz referencia a él en otro lugar con el alias *name. Cómodo para archivos de configuración largos donde el mismo bloque de valores aparece varias veces.
defaults: &defaults
region: us-east-1
log_level: info
production:
<<: *defaults
log_level: warn # override
staging:
<<: *defaults
Algunas advertencias: no todos los procesadores de YAML admiten las anclas y los alias (en especial algunas herramientas de manifiestos de Kubernetes más antiguas y ciertos contextos de Helm). La sintaxis de «clave de fusión» <<: que se muestra arriba es una extensión de YAML 1.1 y está oficialmente obsoleta en la 1.2; js-yaml la admite, pero los analizadores de 1.2 puros puede que no.
Archivos multidocumento
Un solo archivo YAML puede contener varios documentos, separados por ---. Es habitual en Kubernetes: un archivo con un Deployment, un Service y un ConfigMap, separados por ---, aplicados con un solo kubectl apply -f:
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
---
apiVersion: v1
kind: Service
metadata:
name: app-svc
YAML frente a JSON frente a TOML
- JSON: orientado a las máquinas, no admite comentarios, con llaves. Formato universal de carga útil de API.
- YAML: orientado a las personas, admite comentarios, basado en la indentación, propenso a errores para las personas. Formato de configuración universal para las herramientas nativas de la nube.
- TOML: orientado a las personas, admite comentarios, al estilo INI, mucho menos propenso a errores que YAML para la configuración plana. Cargo (Rust), Hugo, Black (Python), Poetry, el Pip moderno: todos usan TOML.
Si puedes elegir para una configuración nueva: TOML para la configuración plana, YAML si necesitas un anidamiento profundo y el ecosistema se ha estandarizado en él (Kubernetes, Ansible), JSON si lo escribe una máquina. YAML es el formato adecuado cuando las personas necesitan leer una configuración profundamente anidada y escribir comentarios significativos en línea.
Privacidad
Las configuraciones de YAML contienen con frecuencia secretos que no deberían pasar por el servidor de otra persona: los blobs en base64 de los Secret de Kubernetes, las contraseñas de bases de datos en application.yml, las claves de API en los flujos de trabajo de CI, los nombres de host internos en las configuraciones de despliegue. El formateador se ejecuta enteramente en tu navegador mediante la biblioteca de código abierto js-yaml: el contenido pegado se analiza y se vuelve a emitir localmente, sin ninguna petición de red, sin subidas y sin registros. Cerrar la pestaña lo borra todo.
Errores frecuentes
- Mezclar tabuladores y espacios en la indentación. El error más común. Los tabuladores están prohibidos por la especificación; algunos editores los insertan de forma silenciosa. Muestra los espacios en blanco en tu editor.
- Indentación incoherente entre elementos hermanos. Las claves hermanas deben estar alineadas en la misma columna. La indentación mixta de 2/4 espacios rompe el análisis.
- Valores sin comillas que parecen booleanos, números, fechas u horas.
NO,012,1.10,10:30,yes: entrecomíllalos. - Falta el espacio después de los dos puntos.
key: valuefunciona;key:valueno es válido (se analiza como una sola cadena). - Espacios en blanco al final. Algunos analizadores tratan los espacios finales como significativos; otros no. El hábito seguro entre herramientas es eliminar los espacios en blanco al final.
- Cadenas multilínea sin el escalar de bloque adecuado. Las cadenas largas necesitan
|(literal, conserva los saltos de línea) o>(plegado, une las líneas). El texto multilínea plano y sin comillas rara vez se comporta como esperas. - Suponer que las anclas y los alias están en todas partes. Helm y algunos contextos de Kubernetes no admiten del todo
&/*. Pruébalos en tu pipeline real antes de depender de ellos. - Discordancias de codificación. Los archivos YAML deberían estar en UTF-8. Un editor de Windows que guarda como UTF-16 con BOM produce archivos que algunos analizadores no pueden leer.
Más preguntas frecuentes
¿El formateador conservará mis comentarios?
No. La biblioteca js-yaml analiza el YAML para obtener un valor de JavaScript y lo vuelve a emitir a partir de ese valor, lo que significa que los comentarios (# like this) se descartan: viven en el texto de origen, no en la estructura analizada. Si conservar los comentarios importa (y suele importar en los archivos de configuración cuidados a mano), usa una alternativa que conserve los comentarios, como eemeli/yaml mediante su API de CST, o haz pequeñas ediciones a mano en lugar de pasar por este formateador en ida y vuelta.
¿Por qué el analizador de YAML de mi servidor trata mi NO como un booleano?
Porque ese analizador usa YAML 1.1 (el predeterminado en PyYAML, snakeyaml y muchos otros), que interpreta NO como el booleano false. Este formateador usa YAML 1.2 de forma predeterminada (mediante js-yaml), así que no desencadena el error aquí, pero en cuanto envías el archivo a un entorno YAML 1.1, la trampa se activa. Entrecomilla siempre las cadenas ambiguas: country: "NO".
¿Puedo convertir YAML a JSON?
Sí, haz clic en «→ JSON». La conversión es sin pérdidas para todo lo que se puede representar en JSON (cadenas, números, booleanos, null, arrays, objetos). Lo que no sobrevive: los comentarios (JSON no tiene sintaxis para ellos), las anclas y los alias (JSON no tiene equivalente) y los tipos de fecha y marca de tiempo de YAML (que se convierten en cadenas en JSON). Para la dirección inversa, usa la herramienta dedicada de JSON a YAML.
¿Se envía algo a un servidor?
No. Todo el análisis, el formateo y la conversión a JSON se ejecutan en tu navegador mediante js-yaml. El YAML pegado nunca se transmite a ningún servidor. Esto importa porque las configuraciones de YAML contienen con frecuencia secretos (valores de los Secret de Kubernetes, contraseñas de bases de datos, claves de API, puntos de conexión internos) que no deberían subirse a un servicio de terceros.
¿Cuál es el límite de tamaño?
No hay un límite estricto: el formateador se ejecuta en la memoria de tu navegador. Los manifiestos típicos de Kubernetes (unos pocos KB) y los charts de Helm (decenas de KB) se formatean al instante. Los archivos multidocumento muy grandes (varios MB) pueden ir lentos, pero por lo general funcionan; si tienes un chart de Helm de 10 MB, formatéalo localmente con una herramienta de línea de comandos.
¿Por qué YAML es tan propenso a errores?
Tres razones que se acumulan: (1) los espacios en blanco significativos hacen que las erratas provoquen cambios semánticos silenciosos; (2) la coerción de tipos permisiva de YAML 1.1 convierte cadenas ambiguas en booleanos o números no deseados; (3) el formato tiene demasiadas formas de escribir lo mismo (bloque frente a flujo, comillas simples frente a dobles, tres variantes de cadenas multilínea). Los hábitos defensivos (entrecomillar siempre, ser coherente con la indentación, validar antes de desplegar) corrigen la mayor parte de la superficie expuesta.