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 los mismos datos, ya sea un registro de usuario, un archivo de configuración o una carga útil de API, pero cada uno optimiza para cosas distintas. Si eliges mal, lo pagas después con diffs de configuración ilegibles o un parser que no puede expresar lo que necesitas. Esta guía compara los tres frente a frente y da una regla práctica para cada uno.

Los mismos datos, de tres maneras

Abajo tienes un objeto pequeño representado en los tres formatos. Al compararlos lado a lado ves qué sacrifica 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, con indentación en lugar de llaves.
yaml
user:
  name: Ada Lovelace
  roles:
    - admin
    - editor
  active: true
XML: los mismos datos, con 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 se mapea directamente a las estructuras de datos que ya tiene todo lenguaje mainstream (objetos/dicts y arrays/listas), así que al analizarlo obtienes tipos nativos sin ambigüedad. No tiene comentarios, ofrece una sola forma de escribir cada valor y no es sensible a los espacios en blanco. Esos límites lo hacen rápido de analizar y seguro de generar desde código.

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 quieres para archivos que una persona edita y relee en un diff: pipelines de CI (GitHub Actions, GitLab CI), manifiestos de Kubernetes y configuración de aplicaciones.

Esa flexibilidad es también la mayor trampa de YAML. Un error de indentación produce una estructura distinta sin ningún error de análisis, y el parser puede convertir valores sin comillas como `no`, `yes`, `on` y las fechas en 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 siempre que un valor admita dos lecturas.

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.

XML persiste en dominios centrados en documentos: APIs SOAP, SVG, DOCX/XLSX (archivos ZIP llenos de XML) y sistemas empresariales de banca, sanidad y gobierno con pipelines validados con XSD que nadie va a reescribir. Si tus datos tienen forma de documento ('un párrafo con un span en negrita en medio') y no de registro, XML suele encajar mejor.

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 solo JSON con otra sintaxis?
Casi. YAML 1.2 es un superconjunto de JSON, así que cualquier documento JSON válido es también YAML válido. 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 se cumple: mucho YAML no 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 no puede expresar: 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 de esas características, y por eso XML sigue aquí aunque JSON ganara para las APIs REST típicas.
¿Qué es el 'problema de Noruega' de YAML?
En YAML, el parser lee `NO` sin comillas (el código de país de Noruega) como el booleano `false`, porque YAML convierte a booleanos los `no`/`yes`/`on`/`off` sin comillas. Pon 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 deba quedarse como cadena literal.

Prueba estas herramientas

Artículos relacionados