YamlBox

Artículo guía · 6 min de lectura

YAML vs JSON: cuándo usar cuál

YAML vs JSON es una elección entre dos formatos de serialización basados ​​en la misma idea básica: anidar pares clave-valor y listas. Las diferencias que importan en la práctica tienen que ver con quién lee el archivo: humanos o máquinas.

Actualizado

YAML vs JSON: la versión corta

JSON es un formato de intercambio de datos: estricto, inequívoco y cada idioma puede analizarlo de forma nativa. YAML es un formato de configuración: acepta comentarios y cadenas de varias líneas, y está diseñado para ser editado por personas en solicitudes de extracción. Utilice JSON en el cable, YAML en archivos que mantienen los humanos y convierta entre ellos cuando un límite lo requiera.

Lo que realmente difiere

Comentarios

YAML tiene comentarios; JSON no lo hace. En los archivos de configuración, esto es decisivo: la razón por la que sabes por qué un tiempo de espera está establecido en 3000 suele ser el comentario que aparece encima. Cuando conviertes YAML en JSON, los comentarios se eliminan, por lo que JSON a menudo se trata como un artefacto de compilación, no como la fuente de la verdad.

Sintaxis y ruido

                # YAML
service:
  name: checkout
  replicas: 3
  ports: [8080, 9090]

// JSON — same data
{
  "service": {
    "name": "checkout",
    "replicas": 3,
    "ports": [8080, 9090]
  }
}
              

YAML elimina llaves, comillas y comas a cambio de sensibilidad a la sangría. Ése es el oficio que todo usuario de YAML conoce: menos caracteres, más formas de hacer que los espacios en blanco sean sutilmente incorrectos.

Tipos y trampas

  • JSON tiene un tipo numérico; YAML distingue enteros, flotantes y más, y YAML 1.1 analiza el código de país NO como el booleano falso, y 1.10 como un número que pierde su cero final a menos que se cite.
  • YAML admite anclajes y alias (&defaults / *defaults) para su reutilización; JSON no tiene equivalente, por lo que los bloques compartidos deben duplicarse o generarse.
  • YAML admite archivos de varios documentos (--- separadores); JSON es un documento por archivo. Los convertidores suelen convertir los documentos en una matriz.
  • JSON requiere cadenas y claves entre comillas dobles; YAML se comillas sólo cuando es necesario, lo que significa que una cadena descuidada puede convertirse silenciosamente en un número o en un valor booleano.

Donde gana cada formato

  • API y formatos de cable: JSON. Analizadores universales, ambigüedad predecible, amigables con la transmisión (JSON Líneas).
  • Kubernetes, CI/CD, Docker Compose, Ansible, Helm: YAML, porque estos ecosistemas lo estandarizaron y admiten comentarios.
  • La configuración del proveedor se genera mediante programación: JSON: los algoritmos la producen sin ansiedad por sangrías.
  • Documentos que un compañero de equipo junior editará a mano: YAML, con comentarios que explican el por qué.

Convertir de forma segura

  1. Conozca sus archivos de múltiples documentos. Un conjunto de manifiestos k8s separado por --- debe convertirse en una matriz JSON, no solo en el primer documento. Utilice un convertidor que informe cuántos documentos encontró.
  2. Cite los números que son identificadores. "1.10" es una versión; 1,10 es un flotador. Habilite las comillas forzadas al convertir a YAML si los valores son cadenas que parecen numéricas.
  3. Mira cómo desaparecen los comentarios. La conversión a JSON conlleva pérdidas por definición; Si los comentarios son importantes, mantenga YAML como fuente y genere JSON solo en el momento de la compilación.
  4. Validar con errores precisos. Los errores de sangría producen mensajes engañosos en algunas herramientas; asegúrese de que el suyo muestre líneas y columnas.

Pruébelo: pegue cualquier YAML en el conversor de YAML a JSON; se incluyen soporte para múltiples documentos y líneas de error precisas, y no se carga nada.

Preguntas comunes

¿Es YAML un superconjunto de JSON?

YAML 1.2 está diseñado como un superconjunto; JSON válido suele ser válido YAML. Pero YAML 1.1 (aún disponible) difiere en algunos casos extremos, y las pestañas, claves duplicadas y ciertas cadenas se analizan de manera diferente en todos los motores. Trate "es técnicamente válido YAML" como un dato curioso, no como una estrategia de migración.

¿Cuál es más rápido de analizar?

Los analizadores JSON son generalmente más rápidos y simples porque la gramática es más pequeña; El análisis nativo JSON existe en cada tiempo de ejecución. Para los archivos de configuración, la diferencia es irrelevante: se analiza una vez al inicio.