YAML vs JSON: ¿cuál es la diferencia?

JSON y YAML describen el mismo tipo de datos: objetos, listas, texto, números, true, false y null. JSON es estricto y está pensado para programas; YAML es más flexible y está pensado para personas que escriben configuración a mano. Esta guía los compara lado a lado, muestra las reglas de YAML que cambian valores sin avisar y explica cómo convertir entre los dos sin sorpresas. El convertidor de abajo funciona en tu navegador, así que puedes probar cada ejemplo mientras lees.

5 min de lectura

Los mismos datos en los dos formatos

Esta es una configuración pequeña en JSON: {"name": "shop", "port": 8080, "debug": false, "hosts": ["a.example.com", "b.example.com"]}. En YAML los mismos datos se escriben con sangría en lugar de llaves: name: shop en una línea, port: 8080 en la siguiente, debug: false, y hosts: seguido de dos líneas con sangría que empiezan por un guion.

Los dos se cargan exactamente como el mismo objeto en cualquier lenguaje de programación. La diferencia está en cómo se escriben y en qué más permite cada formato.

JSONYAML
EstructuraLlaves y corchetesSangría, o llaves si lo prefieres
TextoSiempre entre comillas doblesLas comillas suelen ser opcionales
ComentariosNo se permitenLíneas que empiezan por #
Texto de varias líneasSolo con \n dentro de un textoBloques con | o >
Reutilizar partesNo es posibleAnclas (&nombre) y alias (*nombre)
Varios documentos en un archivoNoSí, separados por una línea de tres guiones
Uso típicoAPI, intercambio de datos, navegadoresConfiguración: Docker Compose, Kubernetes, CI

Pruébalo aquí: YAML a JSON

Abrir la herramienta completa

Por qué YAML es cómodo de escribir

YAML necesita menos caracteres. No hay llaves de cierre que contar, ni comas que olvidar entre elementos, ni comillas alrededor de la mayoría del texto. Los comentarios permiten explicar por qué existe un ajuste, y por eso lo eligieron herramientas que la gente edita a diario, como Docker Compose, Kubernetes, GitHub Actions y Ansible.

Las anclas evitan repeticiones: defines un bloque una vez con &defaults y lo reutilizas con *defaults, o lo fusionas en otro bloque con <<: *defaults y cambias claves sueltas. El texto en bloque conserva los saltos de línea, lo que hace legibles los scripts y los mensajes largos dentro del archivo.

Trampas de YAML que cambian tus datos

La libertad de no poner comillas tiene un precio: YAML adivina el tipo de cada valor sin comillas, y no siempre acierta con lo que querías. La mayoría de estos problemas desaparecen cuando el texto va entre comillas.

  • El problema de Noruega: en YAML 1.1, que muchas herramientas siguen usando, NO, no, yes, on y off son booleanos. Una lista de códigos de país con NO para Noruega se convierte en false.
  • Números de versión: 1.10 es el número 1.1, y 3.0 puede quedar en 3. Escribe "1.10" para que siga siendo texto.
  • Ceros iniciales: los códigos postales y de producto como 0123 pueden convertirse en números, y YAML 1.1 los lee como octales, así que 0123 pasa a ser 83.
  • Horas: en YAML 1.1, 12:30 es un número en base 60, 750.
  • Dos puntos y almohadillas: un valor que contiene ": " o " #" termina antes de tiempo o empieza un comentario. Pon ese texto entre comillas.
  • Tabuladores: YAML no permite tabuladores para sangrar, y una clave con un espacio de más acaba en el bloque equivocado sin ningún error en algunos editores.

Por qué JSON es mejor para los programas

JSON tiene una sola forma de escribir cada cosa y no adivina nada: el texto siempre va entre comillas, así que "NO" sigue siendo texto y 1.10 es claramente un número. Los analizadores son pequeños, rápidos y existen en todos los lenguajes, y los navegadores leen JSON de forma nativa. Eso hace de JSON la opción más segura siempre que los datos los produce y los lee software, como las respuestas de API, los logs, las cachés y los archivos de datos.

La falta de comentarios es la queja más habitual. Algunas herramientas aceptan JSON con comentarios (a menudo llamado JSONC), pero los analizadores estándar lo rechazan, así que no es un buen formato para archivos que deben leer otros programas.

Convertir entre YAML y JSON con seguridad

YAML 1.2 se diseñó como un superconjunto de JSON, así que casi cualquier documento JSON también es YAML válido. La otra dirección necesita un analizador de verdad, porque hay que resolver las funciones de YAML: las anclas y las claves de fusión se expanden, el texto en bloque pasa a ser un texto con \n, y varios documentos se convierten en una lista. Los comentarios no se pueden trasladar, porque JSON no tiene sitio para ellos.

Al convertir JSON a YAML, hay que poner entre comillas todo valor que un lector de YAML podría malinterpretar. El convertidor de esta página revisa cada texto con las reglas de YAML 1.1 y de YAML 1.2 y solo lo pone entre comillas cuando hace falta, así yes, NO, 0123 y 1.10 vuelven sin cambios. Volver a convertir el resultado con Invertir es una forma rápida de demostrar que nada cambió.

¿Cuál deberías usar?

  • Usa YAML para la configuración que las personas escriben y revisan a mano, sobre todo cuando los comentarios ayudan.
  • Usa JSON para los datos que los programas intercambian, guardan o envían por la red.
  • Usa JSON cuando el archivo lo genera el código, aunque después lo lea una persona.
  • Si una herramienta acepta los dos, como muchas, mantén el formato que ya usa tu equipo: la coherencia importa más que las pequeñas diferencias.
  • Si te quedas con YAML, pon entre comillas los textos que parecen números, fechas o yes/no, y revisa los archivos con un analizador antes de desplegarlos.

Paso a paso

  1. Elige la direcciónElige YAML > JSON o JSON > YAML en la parte de arriba del convertidor.
  2. Pega tu archivoPega el contenido o abre el archivo. Ejemplo muestra un archivo YAML con un ancla y una clave de fusión.
  3. Lee los mensajesSi el YAML tiene un error, el mensaje indica la línea y la columna. Las notas listan las etiquetas desconocidas y los comentarios que se omitieron.
  4. Comprueba la ida y vueltaPulsa Invertir para volver a convertir el resultado y compararlo con tu original.

Preguntas frecuentes

¿Un JSON es YAML válido?

Casi siempre. YAML 1.2 se diseñó como un superconjunto de JSON, así que un analizador de YAML 1.2 lee archivos JSON. Los analizadores antiguos de YAML 1.1 tienen algunas diferencias, por ejemplo con ciertas secuencias de escape.

¿YAML es más lento que JSON?

Analizar YAML cuesta más trabajo por sus muchas reglas, pero en archivos de configuración la diferencia no se nota. Para grandes volúmenes de datos y API, JSON es más rápido y sencillo.

¿Por qué mi archivo YAML dice yes pero el programa ve true?

El programa usa un analizador de YAML 1.1, en el que yes, no, on y off son booleanos. Pon el valor entre comillas para que siga siendo texto.

¿Puedo conservar los comentarios al convertir YAML a JSON?

No. JSON no tiene comentarios, así que se pierden. Si los comentarios importan, mantén el archivo YAML como original.

¿Se suben mis archivos cuando los convierto aquí?

No. La conversión se hace por completo en tu navegador, algo importante en archivos de configuración con contraseñas o claves.