Validador y linter de YAML: encuentra errores y trampas ocultas

Valida YAML con la línea y la columna exactas de cada error, y detecta los fallos que los analizadores aceptan sin avisar: booleanos yes/no, tabulaciones, claves duplicadas.

16 líneas
YAML no válido en la línea 15, columna 5: duplicated mapping key: la misma clave aparece dos veces en un mismo mapeo.
13 image: postgres:16
14 restart: always
15 restart: unless-stopped
^
Linter (5)
services:
  web:
    image: nginx:1.27
    ports:
      - '8080:80'
      - '22:22'
    environment:
      COUNTRY: 'NO'
      DEBUG: 'yes'
      APP_VERSION: 1.1
  db:
    image: postgres:16
    restart: unless-stopped

Claves duplicadas: se muestran con el último valor como ganador, que es lo que muchos analizadores hacen sin avisar. La vista formateada se reconstruye a partir de los datos analizados, así que no se conservan los comentarios ni los anclajes. Corrige los problemas en tu archivo original.

Funciona por completo en tu navegador. Tu YAML nunca se sube, así que los secretos de los archivos de configuración se quedan en tu equipo. Ver todas las herramientas gratis.

¿Encontraste un problema o algo que podría mejorar? Leemos todos los mensajes y lo arreglamos rápido.

Este validador de YAML gratis revisa un archivo YAML en busca de errores de sintaxis y muestra la línea y la columna exactas, con las líneas de alrededor y un acento circunflejo bajo el problema. Pega un manifiesto de Kubernetes, un docker-compose.yml, un workflow de GitHub Actions o una especificación OpenAPI y sabrás en un segundo si se analiza correctamente y, si no, dónde falla.

Que un analizador acepte tu archivo no significa que el archivo diga lo que crees. El linter también marca los valores que los analizadores de YAML 1.1 (PyYAML, SnakeYAML, Go yaml.v2) interpretan de forma distinta a YAML 1.2: NO se convierte en false, 0755 en 493, 22:22 en 1342 y 1.10 en 1.1. Enumera cada clave duplicada con los dos números de línea, las tabulaciones en la sangría y los "clave:valor" escritos sin espacio. Comprueba la sintaxis y estas trampas; no valida contra un esquema como la API de Kubernetes.

Cómo usarla

  1. Pega tu YAML en el editor. Viene cargado un ejemplo de docker-compose con algunos errores intencionados para mostrar qué se marca.
  2. Lee la barra de estado: verde significa válido, y rojo muestra el error con su línea y columna y las líneas de alrededor.
  3. Haz clic en cualquier elemento de la lista del linter para saltar a esa línea en el editor y corregirla.
  4. Cambia entre las vistas de YAML formateado y JSON para comprobar cómo se ha analizado realmente el archivo: ahí es donde las sorpresas con yes/no o 0755 se hacen evidentes.
  5. Copia o descarga la salida formateada si la necesitas, y sigue corrigiendo el archivo original para conservar los comentarios.

Preguntas frecuentes

¿Qué es el problema de Noruega en YAML?

En YAML 1.1, las palabras sin comillas y, yes, n, no, on y off (con cualquier combinación habitual de mayúsculas) son booleanos. Así que una lista de códigos de país que contenga NO para Noruega te da false en lugar de la cadena "NO". YAML 1.2 (2009) lo corrigió: solo true y false son booleanos. Muchos analizadores muy usados siguen la 1.1, entre ellos PyYAML, Psych de Ruby, SnakeYAML de Java y yaml.v2 de Go, así que la solución segura es poner esos valores entre comillas: "NO", "yes", "on".

¿Por qué no se permiten tabulaciones en YAML?

La especificación de YAML prohíbe las tabulaciones para la sangría porque su ancho no está definido, y la sangría es como YAML expresa la estructura. Las tabulaciones se permiten dentro de los valores y los comentarios, pero no en el espacio en blanco inicial de una línea. Configura tu editor para que inserte espacios en los archivos .yml y .yaml; dos espacios por nivel es la convención más habitual.

¿Se permiten claves duplicadas en YAML?

No. La especificación de YAML exige que las claves de un mapeo sean únicas, pero los analizadores no se ponen de acuerdo sobre qué hacer: algunos dan un error (como este validador) y otros se quedan con el último valor sin avisar. Eso hace que los duplicados sean peligrosos: en un manifiesto largo puedes editar la primera aparición y no ver ningún efecto. Esta herramienta enumera cada duplicado con la línea en la que se definió la clave por primera vez.

¿Por qué mi YAML dice "bad indentation of a mapping entry"?

O la línea tiene una sangría distinta de las demás claves del mismo nivel, o un valor contiene dos puntos seguidos de un espacio y necesita comillas. Por ejemplo, title: Note: read this falla porque el analizador ve una segunda clave. Escribe title: "Note: read this". Revisa la línea indicada y la de encima; el error suele empezar en la línea anterior.

¿YAML es un superconjunto de JSON?

YAML 1.2 se diseñó para que el JSON válido también sea YAML válido, y en la práctica cualquier documento JSON se analiza aquí sin problemas. Lo contrario no es cierto: YAML añade comentarios, anclas y alias, cadenas de varias líneas y varios documentos por archivo. Usa la vista JSON para ver cómo se traduce un archivo YAML a datos JSON simples.

¿Valida esquemas de Kubernetes o de GitHub Actions?

No. Comprueba la sintaxis de YAML y las trampas anteriores, que causan la mayoría de los fallos reales, pero no sabe qué claves admite un Deployment de Kubernetes o un workflow de GitHub. Para validar esquemas, usa kubectl apply --dry-run=server, kubeconform o la extensión YAML para VS Code con el JSON Schema correspondiente.

YAML 1.1 frente a YAML 1.2: valores que cambian de significado

Este validador analiza con las reglas de YAML 1.2 (js-yaml). Si tu archivo lo lee un analizador de YAML 1.1, estos valores sin comillas significan otra cosa, y el linter avisa de cada uno:

• yes, no, on, off, y, n → booleanos en 1.1, cadenas en 1.2. Los workflows de GitHub Actions empiezan por on:, que un analizador 1.1 lee como la clave true.

• 0755 → octal 493 en 1.1, decimal 755 en 1.2. Lo sufren tanto los permisos de archivo como los códigos postales con un cero inicial.

• 22:22 → 1342 en 1.1 (base 60), la cadena "22:22" en 1.2. La documentación de Docker Compose recomienda poner entre comillas las asignaciones de puertos precisamente por esto.

• 1.10 → el número 1.1 en ambas versiones. Pon entre comillas los números de versión.

• 2024-01-05 → una marca de tiempo en la mayoría de los analizadores, no una cadena.

La regla que los evita todos: pon entre comillas cualquier valor que deba ser texto pero parezca otra cosa.

Errores habituales de YAML y cómo corregirlos

• "bad indentation of a mapping entry": sangría incoherente, o un valor sin comillas que contiene ": ".

• "end of the stream or a document separator is expected": normalmente una línea con menos sangría que las de su nivel, o texto después de unas comillas de cierre.

• "can not read a block mapping entry; a multiline key may not be an implicit key": a menudo faltan los dos puntos en la línea anterior, o se abrieron unas comillas que no se cerraron.

• "unexpected end of the stream within a double quoted scalar": unas " sin cerrar en algún punto por encima de la línea indicada.

• Los valores que empiezan por @, `, *, &, !, | o > tienen un significado especial o están reservados. Ponlos entre comillas.

• Un # precedido de un espacio inicia un comentario, así que password: abc #123 guarda abc. Pon entre comillas los valores que contengan " #".

Herramientas gratis relacionadas

  • Formateador JSON — Formatea, minifica y valida JSON, con los errores de análisis localizados por línea y columna. En tu navegador, sin subir nada.
  • JSON a TypeScript — Pega una muestra JSON y obtén interfaces de TypeScript, un esquema Zod, JSON Schema o tipos para Go, Python, Java, C#, Kotlin, Swift y Rust.
  • Formateador de SQL — Convierte SQL desordenado en consultas legibles y con sangría coherente para PostgreSQL, MySQL, T-SQL, BigQuery y más. Funciona en tu navegador.
  • Probador de regex — Prueba una expresión regular con un texto de ejemplo, con resaltado de coincidencias en vivo, grupos de captura y vista previa de reemplazo. Gratis, en tu navegador.
  • Comparador de textos — Compara dos versiones de un texto, código o archivo JSON y ve exactamente qué líneas, palabras y caracteres cambiaron.