¿Cuál es la diferencia entre YAML y JSON?

Resuelto pierrotlefou asked hace 14 años • 14 respuestas

¿Cuáles son las diferencias entre YAML y JSON, considerando específicamente las siguientes cosas?

  • Rendimiento (tiempo de codificación/decodificación)
  • Consumo de memoria
  • Claridad de expresión
  • Disponibilidad de biblioteca, facilidad de uso (prefiero C)

Estaba planeando usar uno de estos dos en nuestro sistema integrado para almacenar archivos de configuración.

pierrotlefou avatar Nov 13 '09 09:11 pierrotlefou
Aceptado

Técnicamente, YAML es un superconjunto de JSON. Esto significa que, al menos en teoría, un analizador YAML puede entender JSON, pero no necesariamente al revés.

Consulte las especificaciones oficiales, en la sección titulada "YAML: Relación con JSON" .

En general, hay ciertas cosas que me gustan de YAML que no están disponibles en JSON.

  • Como señaló @jdupont , YAML es visualmente más fácil de ver. De hecho, la página de inicio de YAML es en sí misma YAML válida, pero es fácil de leer para un humano.
  • YAML tiene la capacidad de hacer referencia a otros elementos dentro de un archivo YAML mediante "anclajes". Por lo tanto, puede manejar información relacional como se podría encontrar en una base de datos MySQL.
  • YAML es más sólido a la hora de incorporar otros formatos de serialización como JSON o XML dentro de un archivo YAML.

En la práctica, ninguno de estos dos últimos puntos probablemente importará para las cosas que usted o yo hagamos, pero a largo plazo, creo que YAML será un formato de serialización de datos más sólido y viable.

Actualmente, AJAX y otras tecnologías web tienden a utilizar JSON. Actualmente, YAML se utiliza más para procesos de datos fuera de línea. Por ejemplo, se incluye de forma predeterminada en el paquete de visión por computadora OpenCV basado en C, mientras que JSON no.

Encontrará bibliotecas C tanto para JSON como para YAML. Las bibliotecas de YAML tienden a ser más nuevas, pero no he tenido problemas con ellas en el pasado. Véase, por ejemplo, Yaml-cpp .

AndyL avatar Nov 13 '2009 14:11 AndyL

Diferencias:

  1. YAML, dependiendo de cómo lo uses, puede ser más legible que JSON
  2. JSON suele ser más rápido y probablemente todavía sea interoperable con más sistemas
  3. Es posible escribir un analizador JSON "suficientemente bueno" muy rápidamente
  4. Las claves duplicadas, que son JSON potencialmente válidas, definitivamente no son YAML no válidas.
  5. YAML tiene un montón de características, incluidos comentarios y anclajes relacionales. En consecuencia, la sintaxis de YAML es bastante compleja y puede resultar difícil de entender.
  6. Es posible escribir estructuras recursivas en yaml: {a: &b [*b]}, que se repetirán infinitamente en algunos convertidores. Incluso con la detección circular, todavía es posible una "bomba yaml" (ver bomba xml ).
  7. Como no hay referencias, es imposible serializar estructuras complejas con referencias de objetos en JSON. Por tanto, la serialización YAML puede ser más eficiente.
  8. En algunos entornos de codificación, el uso de YAML puede permitir que un atacante ejecute código arbitrario .

Observaciones:

  1. Los programadores de Python generalmente son grandes admiradores de YAML, debido al uso de sangría, en lugar de sintaxis entre corchetes, para indicar niveles.
  2. Muchos programadores consideran que añadir "significado" a la sangría es una mala elección.
  3. Si el formato de datos saldrá del entorno de una aplicación, se analizará dentro de una interfaz de usuario o se enviará en una capa de mensajería, JSON podría ser una mejor opción.
  4. YAML se puede utilizar, directamente, para tareas complejas como definiciones gramaticales y, a menudo, es una mejor opción que inventar un nuevo lenguaje.
Erik Aronesty avatar Jun 07 '2013 14:06 Erik Aronesty

Sin pasar por la teoría esotérica

Esto responde al título, no a los detalles, ya que la mayoría simplemente lee el título de un resultado de búsqueda en Google, como yo, así que sentí que era necesario explicarlo desde la perspectiva de un desarrollador web .

  1. YAML utiliza sangría espacial, que es un territorio familiar para los desarrolladores de Python.
  2. A los desarrolladores de JavaScript les encanta JSON porque es un subconjunto de JavaScript y se puede interpretar y escribir directamente dentro de JavaScript, además de usar una forma abreviada de declarar JSON, que no requiere comillas dobles en las claves cuando se usan nombres de variables típicos sin espacios.
  3. Hay una gran cantidad de analizadores que funcionan muy bien en todos los idiomas, tanto para YAML como para JSON.
  4. El formato espacial de YAML puede ser mucho más fácil de ver en muchos casos porque el formato requiere un enfoque más legible para los humanos.
  5. El formulario de YAML, aunque es más compacto y fácil de ver, puede ser engañosamente difícil de editar manualmente si no tienes el formato de espacio visible en tu editor. Las pestañas no son espacios, lo que confunde aún más si no tienes un editor que interprete las pulsaciones de teclas en espacios.
  6. JSON es mucho más rápido de serializar y deserializar debido a que hay muchas menos funciones que verificar que YAML, lo que permite que un código más pequeño y liviano procese JSON.
  7. Un error común es pensar que YAML necesita menos puntuación y es más compacto que JSON, pero esto es completamente falso. Los espacios en blanco son invisibles, por lo que parece que hay menos caracteres, pero si cuenta los espacios en blanco reales que son necesarios para que YAML se interprete correctamente junto con la sangría adecuada, encontrará que YAML en realidad requiere más caracteres que JSON. JSON no utiliza espacios en blanco para representar jerarquías o agrupaciones y se puede aplanar fácilmente eliminando espacios en blanco innecesarios para un transporte más compacto.

El elefante en la habitación: Internet mismo

JavaScript domina claramente la web por un margen enorme y los desarrolladores de JavaScript prefieren usar JSON como formato de datos de manera abrumadora junto con las API web populares, por lo que resulta difícil discutir el uso de YAML en lugar de JSON cuando se hace programación web en el sentido general, ya que probablemente perderá la votación. en un ambiente de equipo. De hecho, la mayoría de los programadores web ni siquiera saben que existe YAML, y mucho menos consideran usarlo.

Si está realizando programación web, JSON es la forma predeterminada de hacerlo porque no se necesita ningún paso de traducción cuando se trabaja con JavaScript, por lo que debe encontrar un argumento mejor para usar YAML en lugar de JSON en ese caso.

King Friday avatar Jan 23 '2016 02:01 King Friday