La diferencia de fondo
JSON (JavaScript Object Notation) y YAML (YAML Ain't Markup Language) representan los mismos datos jerárquicos de clave y valor: objetos, listas, cadenas, números, booleanos y nulos. La diferencia está en cómo los expresan.
JSON es estricto, está pensado para las máquinas y no deja lugar a la ambigüedad. YAML está pensado para que lo lea una persona, es sensible a los espacios y resulta flexible, a veces peligrosamente flexible.
JSON: ventajas e inconvenientes
- Todos los lenguajes importantes traen un analizador de JSON incorporado
- No hay ambigüedad: ninguna conversión de tipo sorprendente
- Ocupa muy poco al minificarlo
- Se transmite sin problemas en cuerpos HTTP y en URL
- Es fácil de comparar en un control de versiones
- No admite comentarios
- No hay cadenas de varias líneas sin escapar caracteres
- Todas las claves tienen que ir entrecomilladas
- Una coma final es un error de sintaxis
- Se vuelve difícil de leer en configuraciones muy anidadas
**Ideal para:** cuerpos de petición y respuesta de API, almacenamiento local, documentos de base de datos, comunicación entre servicios y cualquier intercambio de datos entre máquinas.
YAML: ventajas e inconvenientes
- Admite comentarios (
# así) - Las cadenas de varias líneas son ciudadanas de primera con
|y> - La mayoría de cadenas no necesitan comillas
- Resulta más compacto en archivos de configuración
- Se usa muchísimo en herramientas de operaciones (Docker Compose, GitHub Actions, Kubernetes)
- Los espacios cuentan: un error de indentación provoca fallos silenciosos
- Varias conversiones de tipo del estilo del "problema de Noruega":
nose interpreta comofalse,oncomotruey un1.0suelto como número decimal - Las distintas versiones de YAML (1.1 y 1.2) tienen reglas diferentes
- Es más difícil de analizar correctamente que JSON
**Ideal para:** archivos de configuración que edita una persona, procesos de integración y despliegue continuos, manifiestos de Kubernetes, libros de Ansible y cualquier archivo que alguien escriba y lea a menudo.
El mismo ejemplo en los dos formatos
Los mismos datos en JSON:
json
{
"name": "api-service",
"port": 8080,
"database": {
"host": "localhost",
"port": 5432
},
"features": ["auth", "cache", "metrics"]
}
Y en YAML:
yaml
name: api-service
port: 8080
database:
host: localhost
port: 5432
features:
- auth
- cache
- metrics
La versión en YAML se lee mejor si vas a editar la configuración a mano. La de JSON es más segura si un proceso automatizado tiene que analizarla.
El problema de Noruega y otras trampas de YAML
YAML 1.1 (que usan muchas herramientas) interpreta como booleanos estos valores: yes, no, on, off, true y false. Una clave de configuración como country: NO acabaría valiendo country: false. Entrecomilla las cadenas que se puedan malinterpretar.
Con los decimales también se pasa de listo: version: 1.0 se convierte en el número 1.0, no en la cadena "1.0". En archivos de Docker Compose esto ha provocado fallos reales con los números de versión.
Convertir de uno a otro
Los conversores de YAML a JSON y de JSON a YAML de NoxaKit hacen la conversión completa al instante, incluidos los objetos anidados, las listas, las cadenas de varias líneas y la normalización de tipos. Pega tu YAML y te devuelve JSON limpio e indentado (o al revés), listo para copiar con un clic.
El formateador de YAML también valida la sintaxis y reordena la indentación de forma coherente, muy útil antes de subir un manifiesto de Kubernetes o un flujo de trabajo de GitHub Actions.