Skip to content
jsonforge.app
Volver al blog
Guía9 min de lectura

JSON vs XML vs YAML: cómo elegir el formato de datos adecuado

JSON, XML y YAML pueden describir exactamente los mismos datos — un registro de usuario, un archivo de configuración, una carga útil de API — pero cada uno optimiza para cosas distintas. Elegir mal para una tarea determinada suele notarse después, en forma de diffs ilegibles de configuración o de un parser que no puede expresar lo que necesitas. Esta guía compara los tres frente a frente y da una regla práctica concreta para cada uno.

Los mismos datos, de tres maneras

Aquí tienes un objeto pequeño representado en los tres formatos. Compararlos lado a lado es la forma más rápida de ver qué sacrifica realmente cada uno.

JSON — llaves y comillas explícitas, sin ambigüedad sobre la estructura.
json
{
  "user": {
    "name": "Ada Lovelace",
    "roles": ["admin", "editor"],
    "active": true
  }
}
YAML — los mismos datos, usando indentación en lugar de llaves.
yaml
user:
  name: Ada Lovelace
  roles:
    - admin
    - editor
  active: true
XML — los mismos datos, usando etiquetas de apertura/cierre y atributos.
xml
<user active="true">
  <name>Ada Lovelace</name>
  <roles>
    <role>admin</role>
    <role>editor</role>
  </roles>
</user>

Los mismos tres campos, con cantidades de puntuación muy distintas. Esa diferencia es toda la historia: JSON es el más amigable para las máquinas, YAML es el más amigable para escribirlo a mano, y XML es el más expresivo cuando el documento en sí necesita estructura más allá de simples datos de clave/valor.

Dónde gana JSON

JSON es el formato predeterminado por una razón: se mapea directamente a las estructuras de datos que ya tiene todo lenguaje mainstream (objetos/dicts y arrays/listas), así que analizarlo hace un round-trip hacia tipos nativos sin ambigüedad alguna. No tiene comentarios, ni múltiples formas de escribir el mismo valor, ni sensibilidad a los espacios en blanco — lo cual suena limitante, pero es exactamente lo que lo hace rápido de analizar y seguro de generar mediante programación.

Usa JSON para cualquier comunicación máquina a máquina: cargas útiles de APIs REST y GraphQL, datos pasados entre servicios, cualquier cosa almacenada en una base de datos de documentos (MongoDB, JSONB de PostgreSQL) y cualquier configuración que se lea y escriba principalmente mediante código en lugar de editarse a mano.

Dónde gana YAML

YAML es un superconjunto estricto del modelo de datos de JSON con una sintaxis mucho más amigable para los humanos: sin llaves de cierre que contar, comentarios con # e indentación en lugar de puntuación. Eso es exactamente lo que quieres para archivos que una persona edita directamente y relee en un diff — pipelines de CI (GitHub Actions, GitLab CI), manifiestos de Kubernetes y configuración de aplicaciones.

El contrapunto es que la flexibilidad de YAML es también su mayor trampa: los errores de indentación producen silenciosamente una estructura distinta en lugar de un error de análisis, y valores sin comillas como `no`, `yes`, `on` y las fechas pueden convertirse automáticamente a booleanos o timestamps que no pretendías (el infame 'problema de Noruega', donde el código de país NO se convierte en el booleano false). Pon comillas a tus cadenas cuando haya cualquier ambigüedad.

Dónde gana XML

XML parece una carga heredada junto a JSON, pero hace cosas que ni JSON ni YAML pueden: atributos junto al contenido del elemento, contenido mixto (texto y elementos intercalados, como HTML), espacios de nombres para combinar vocabularios de distintas fuentes, y validación de esquemas madura (XSD) más herramientas de transformación (XSLT) que preceden a JSON por una década.

Por eso XML persiste en dominios centrados en documentos — APIs SOAP, SVG, DOCX/XLSX (que son archivos ZIP llenos de XML) y sistemas empresariales (banca, sanidad, gobierno) con pipelines existentes validados con XSD que nadie va a reescribir. Si tus datos son genuinamente con forma de documento (piensa en 'un párrafo con un span en negrita en medio') y no de registro, XML suele seguir siendo la mejor opción.

Convertir entre formatos

Como los tres describen el mismo modelo de datos de objeto/array/string/number/boolean/null (los atributos y el contenido mixto de XML son lo único que no se mapea limpiamente), convertir entre JSON, YAML y XML suele ser mecánico para cualquier cosa con forma de registro. Las herramientas JSON to YAML, YAML to JSON, JSON to XML y XML to JSON de JsonForge hacen la conversión en el navegador, lo cual es útil cuando migras el formato de un archivo de configuración o necesitas entregar una exportación en JSON a un compañero que solo usa YAML.

FAQ

¿Es YAML simplemente JSON con otra sintaxis?
Casi — YAML 1.2 es un superconjunto de JSON, lo que significa que cualquier documento JSON válido es también YAML válido. Pero YAML añade características que JSON no tiene (comentarios, anclas/referencias, archivos multidocumento) y sus propias rarezas de análisis (conversión implícita de tipos), así que lo contrario no es cierto: no todo YAML es JSON válido.
¿Por qué Kubernetes y las herramientas de CI usan YAML en lugar de JSON?
Porque esos archivos se escriben y se revisan a mano constantemente. La ausencia de llaves y el soporte de comentarios de YAML lo hacen mucho más agradable de leer y de ver en un pull request que el JSON equivalente, aunque el JSON se analizaría de forma idéntica.
¿Por qué XML sigue existiendo si JSON es más simple?
XML admite cosas que JSON estructuralmente no puede: atributos en los elementos, contenido mixto de texto/elementos, espacios de nombres y validación de esquemas mediante XSD. Los formatos construidos sobre XML — SVG, DOCX, XLSX, SOAP — dependen justo de esas características, por eso XML no ha desaparecido aunque JSON ganara para las APIs REST típicas.
¿Qué es el 'problema de Noruega' de YAML?
En YAML, `NO` sin comillas (el código de país de Noruega) se analiza como el booleano `false`, porque YAML convierte automáticamente a booleanos los `no`/`yes`/`on`/`off` sin comillas. Es un gotcha bien conocido — pon siempre comillas a los códigos de país, las cadenas de versión y cualquier cosa que parezca un booleano o un número pero que deba tratarse como cadena literal.

Prueba estas herramientas

Artículos relacionados