Comparativas Datos y codificación

JSON frente a YAML frente a XML

JSON para API e intercambio de datos, YAML para configuración editada a mano, XML para documentos y estándares con esquemas. Sintaxis, tipos y trampas.

Última revisión:

AdSense Placeholder
Slot: header_reference_page
En esta página

Los tres representan datos estructurados como texto. JSON es el más simple y estricto, y el formato por defecto de las API web. YAML es el más cómodo de escribir a mano y admite comentarios, por eso lo usan los archivos de configuración (Kubernetes, canalizaciones de CI, Ansible), pero su tipado implícito tiene trampas. XML es el más verboso, pero tiene atributos, espacios de nombres, mezcla de texto y marcado y una validación por esquemas muy madura, así que sigue siendo el formato de los documentos y de los estándares de larga vida (archivos de Office, SVG, RSS, SOAP, mapas del sitio).

De un vistazo

Propiedad JSON YAML XML
Estructura Objetos, matrices, escalares Mapas, secuencias, escalares (por sangría) Árbol de elementos con atributos y texto
Tipos integrados Cadena, número, true/false, null Cadenas, enteros, decimales, booleanos, null, marcas de tiempo (según el esquema) Todo es texto salvo que un esquema diga otra cosa
Comentarios No Sí, # Sí, <!-- -->
Legibilidad a mano Buena La mejor Verboso
Rigidez Muy estricto (sin comas finales, solo comillas dobles) Permisivo; los espacios en blanco importan Buena formación estricta
Referencias y reutilización No Anclas y alias (&, *) Entidades, XInclude
Espacios de nombres No No Sí
Lenguajes de esquema JSON Schema Normalmente JSON Schema XSD, DTD, RELAX NG
Usos típicos API REST, almacenamiento del navegador, registros, manifiestos de paquetes Configuración, canalizaciones de CI, Kubernetes, Ansible Documentos de Office, SVG, RSS/Atom, SOAP, mapas del sitio

El mismo registro en cada formato:

{
  "name": "web-01",
  "port": 8080,
  "enabled": true,
  "tags": ["prod", "eu"]
}
# Server settings
name: web-01
port: 8080
enabled: true
tags:
  - prod
  - eu
<!-- Server settings -->
<server name="web-01">
  <port>8080</port>
  <enabled>true</enabled>
  <tags>
    <tag>prod</tag>
    <tag>eu</tag>
  </tags>
</server>

Estos archivos ocupan 84, 78 y 161 bytes. Las versiones JSON y YAML producen exactamente los mismos datos; en la versión XML, 8080 y true son solo texto, y quien la escribió tuvo que decidir si name es un atributo o un elemento hijo.

JSON

JSON tiene seis clases de valor y una sola forma de escribir cada una, así que los analizadores de todos los lenguajes coinciden en lo que significa un documento. Esa previsibilidad es la razón de su éxito en las API. El precio es que no perdona al editarlo a mano: una coma final o una cadena entre comillas simples invalidan todo el archivo. Compruebe los archivos con el validador de JSON.

Elija JSON cuando los programas intercambien datos: peticiones y respuestas de API, mensajes, registros, almacenamiento del navegador o cualquier archivo escrito sobre todo por software.

YAML

YAML usa la sangría en lugar de llaves y corchetes, y admite comentarios, cadenas de varias líneas y anclas para evitar repeticiones. Es agradable de escribir pero fácil de equivocarse sin notarlo. Los analizadores YAML 1.1, todavía comunes (PyYAML es uno), deducen el tipo de los valores sin comillas:

Usted escribe YAML 1.1 lo lee como
country: no false (el «problema de Noruega»)
version: 1.10 el número 1.1
zip: 01234 el número octal 668
time: 12:30 el número 750 (base 60)

Ponga entre comillas los valores que deban seguir siendo cadenas y valide con el validador de YAML. No cargue nunca YAML no fiable con un cargador capaz de construir objetos arbitrarios; use el cargador seguro de su biblioteca.

Elija YAML cuando las personas editen el archivo a mano y los comentarios ayuden: configuración de aplicaciones, manifiestos de despliegue, flujos de CI.

XML

XML separa el marcado del texto, así que puede representar documentos donde se mezclan prosa y estructura (<p>Click <b>here</b></p>), no solo registros. Los espacios de nombres permiten que varios vocabularios compartan un archivo, y XSD puede imponer tipos, rangos y estructura antes de aceptar los datos. Es verboso, y los analizadores deben configurarse con cuidado: desactive las entidades externas y el procesamiento de DTD con entradas no fiables para evitar los ataques XXE y «billion laughs».

Elija XML cuando lo exija un estándar o un socio, cuando los documentos mezclen texto y marcado, o cuando necesite una validación estricta por esquema y espacios de nombres.

¿Cuál elegir?

  • API web o datos que pasan entre programas: JSON.
  • Configuración que editan y comentan personas: YAML (con comillas en las cadenas que parezcan números o booleanos).
  • Documentos, contenido mixto o un estándar XML establecido: XML.
  • Convertir entre ellos: el conversor de JSON a YAML, el conversor de YAML a JSON, el conversor de JSON a XML y el conversor de XML a JSON lo hacen en el navegador; en las conversiones con XML habrá que decidir entre atributos y elementos.

Para las reglas de sintaxis de JSON en detalle, vea Cómo funciona JSON.

Pruebe estas herramientas

Véase también

  • Guía Cómo funciona JSON
    Los seis tipos de valor JSON, por qué falla el análisis, trampas con enteros grandes y orden de claves, JSONPath y conversión a TypeScript.
  • Glosario JSON
    JSON (JavaScript Object Notation) es un formato de texto ligero para datos estructurados, formado por objetos, matrices, cadenas, números.
  • Glosario YAML
    YAML es un formato de datos legible para personas que usa sangrado en lugar de llaves, muy usado en archivos de configuración.
  • Glosario XML
    XML (Extensible Markup Language) es un formato de texto que describe datos con etiquetas anidadas con nombre, como <name>Ana</name>.

Preguntas frecuentes

Casi. YAML 1.2 se diseñó como superconjunto de JSON, así que un analizador YAML 1.2 lee los documentos JSON corrientes. Hay casos límite (claves muy largas, algunas secuencias de escape, claves duplicadas), y muchas herramientas siguen usando analizadores YAML 1.1.

La gramática de JSON no tiene sintaxis de comentarios; se omitió a propósito para que el formato fuera solo de intercambio de datos. Si necesita configuración comentada, use YAML o una variante de JSON que su herramienta admita expresamente (como JSONC), y reserve el JSON estándar para el intercambio de datos.

AdSense Placeholder
Slot: footer_leaderboard