¿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 la biblioteca, facilidad de uso (prefiero C)
Estaba planeando usar uno de estos dos en nuestro sistema integrado para almacenar archivos de configuración.
Respuestas:
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.
En la práctica, ninguno de estos dos últimos puntos probablemente importará para las cosas que usted o yo hacemos, pero a largo plazo, creo que YAML será un formato de serialización de datos más robusto y viable.
En este momento, AJAX y otras tecnologías web tienden a usar JSON. Actualmente, YAML se está utilizando más para procesos de datos fuera de línea. Por ejemplo, se incluye de manera predeterminada en el paquete de visión por computadora OpenCV basado en C, mientras que JSON no.
Encontrará bibliotecas C para JSON y YAML. Las bibliotecas de YAML tienden a ser más nuevas, pero no he tenido problemas con ellas en el pasado. Ver por ejemplo Yaml-cpp .
fuente
Diferencias:
{a: &b [*b]}
que se repetirá infinitamente en algunos convertidores. Incluso con detección circular, todavía es posible una "bomba yaml" (ver bomba xml ).Observaciones:
fuente
Sin pasar por la teoría esotérica
Esto responde al título, no a los detalles, ya que la mayoría solo leyó 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 .
El elefante en la habitación: el propio internet
JavaScript domina tan claramente la web por un amplio margen y los desarrolladores de JavaScript prefieren usar JSON como el formato de datos de manera abrumadora junto con las API web populares, por lo que se hace difícil discutir el uso de YAML sobre JSON cuando se realiza la programación web en el sentido general, ya que es probable que sea votado en un ambiente de equipo De hecho, la mayoría de los programadores web ni siquiera saben que YAML existe, y mucho menos consideran usarlo.
Si está haciendo una programación web, JSON es el camino predeterminado 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 sobre JSON en ese caso.
fuente
Esta pregunta tiene 6 años, pero extrañamente, ninguna de las respuestas realmente aborda los cuatro puntos (velocidad, memoria, expresividad, portabilidad).
Velocidad
Obviamente, esto depende de la implementación, pero debido a que JSON es tan ampliamente utilizado y tan fácil de implementar, ha tendido a recibir un mayor soporte nativo y, por lo tanto, velocidad. Teniendo en cuenta que YAML hace todo lo que JSON hace, más un camión más, es probable que de cualquier implementación comparable de ambos, el JSON sea más rápido.
Sin embargo, dado que un archivo YAML puede ser un poco más pequeño que su homólogo de JSON (debido al menor número
"
y,
caracteres), es posible que un analizador YAML altamente optimizado podría ser más rápida en circunstancias excepcionales.Memoria
Básicamente se aplica el mismo argumento. Es difícil ver por qué un analizador YAML alguna vez sería más eficiente en memoria que un analizador JSON, si representan la misma estructura de datos.
Expresividad
Como señalaron otros, los programadores de Python tienden a preferir YAML, los programadores de JavaScript a JSON. Haré estas observaciones:
Portabilidad
Es difícil imaginar un lenguaje moderno sin una biblioteca JSON. También es difícil imaginar un analizador JSON que implemente algo menos que la especificación completa. YAML tiene un amplio soporte, pero es menos ubicuo que JSON, y cada analizador implementa un subconjunto diferente. Por lo tanto, los archivos YAML son menos interoperables de lo que piensas.
Resumen
JSON es el ganador por el rendimiento (si corresponde) y la interoperabilidad. YAML es mejor para archivos mantenidos por humanos. HJSON es un compromiso decente aunque con una portabilidad muy reducida. JSON5 es un compromiso más razonable, con una sintaxis bien definida.
fuente
GIT y YAML
Las otras respuestas son buenas. Lee esos primero. Pero agregaré otra razón para usar YAML a veces: git .
Cada vez más, muchos proyectos de programación usan repositorios git para distribución y archivo. Y, si bien el historial de un repositorio de git puede almacenar archivos JSON y YAML por igual, el método "diff" utilizado para rastrear y mostrar los cambios en un archivo está orientado a líneas. Dado que YAML se ve obligado a estar orientado a la línea, cualquier pequeño cambio en un archivo YAML es más fácil de ver por un humano.
Es cierto, por supuesto, que los archivos JSON pueden "hacerse bonitos" clasificando las cadenas / claves y agregando sangría. Pero esto no es lo predeterminado y soy vago.
Personalmente, generalmente uso JSON para la interacción de sistema a sistema. A menudo uso YAML para archivos de configuración, archivos estáticos y archivos rastreados. (También evito generalmente agregar anclas relacionales YAML. La vida es demasiado corta para cazar bucles).
Además, si la velocidad y el espacio son realmente una preocupación, tampoco lo uso. Es posible que desee mirar BSON.
fuente
Me parece que YAML es más fácil para la vista: menos paréntesis, "" etc. Aunque existe la molestia de las pestañas en YAML ... pero uno se acostumbra.
En términos de rendimiento / recursos, no esperaría grandes diferencias entre los dos.
Además, estamos hablando de archivos de configuración, por lo que no esperaría una alta frecuencia de actividad de codificación / decodificación, ¿no?
fuente
Si no necesita ninguna característica que tenga YAML y JSON no, preferiría JSON porque es muy simple y es ampliamente compatible (tiene muchas bibliotecas en muchos idiomas). YAML es más complejo y tiene menos soporte. No creo que la velocidad de análisis o el uso de la memoria sean muy diferentes, y tal vez no sean una gran parte del rendimiento de su programa.
fuente
Técnicamente, YAML ofrece mucho más que JSON (YAML v1.2 es un superconjunto de JSON):
Anclas y herencia: ejemplo de 3 elementos idénticos:
La mayoría de las veces las personas no usarán esas características adicionales y la principal diferencia es que YAML usa sangría mientras que JSON usa corchetes . Esto hace que YAML sea más conciso y legible (para el ojo entrenado).
¿Cuál elegir?
fuente
Dado que esta pregunta ahora ocupa un lugar destacado al buscar YAML y JSON, vale la pena señalar una diferencia rara vez citada entre los dos: licencia. JSON pretende tener una licencia a la que deben adherirse los usuarios de JSON (incluido el "legalmente ambiguo" se utilizará para el bien, no para el mal "). YAML no tiene dicho reclamo de licencia, y eso podría ser una diferencia importante (para su abogado, si no para usted).
fuente
{ "": #, [] }
???A veces no tienes que decidir por uno sobre el otro.
En Go, por ejemplo, puede tener ambos al mismo tiempo:
fuente
De: Arnaud Lauret Libro "El diseño de las API web". :
El formato de datos JSON
JSON es un formato de datos de texto basado en cómo el lenguaje de programación JavaScript describe los datos pero, a pesar de su nombre, es completamente independiente del idioma (consulte https://www.json.org/ ). Con JSON , puede describir objetos que contienen pares de nombre / valor desordenados y también matrices o listas que contienen valores ordenados, como se muestra en esta figura.
Un objeto está delimitado por llaves ({}). Un nombre es una cadena entre comillas ("nombre") y está separado de su valor por dos puntos (:). Un valor puede ser una cadena como "valor", un número como 1.23, un valor booleano (verdadero o falso), el valor nulo nulo, un objeto o una matriz. Una matriz está delimitada por corchetes ([]), y sus valores están separados por comas (,). El formato JSON se analiza fácilmente utilizando cualquier lenguaje de programación. También es relativamente fácil de leer y escribir. Es ampliamente adoptado para muchos usos, como bases de datos, archivos de configuración y, por supuesto, API.
Ñame
YAML (YAML Ain't Markup Language) es un formato de serialización de datos amigable para los humanos. Al igual que JSON, YAML ( http://yaml.org ) es un formato de datos clave / valor. La figura muestra una comparación de los dos.
Tenga en cuenta los siguientes puntos:
No hay comillas dobles ("") alrededor de nombres de propiedad y valores en YAML .
Las llaves y comas estructurales ({}) y las comas (,) de JSON se reemplazan por nuevas líneas y sangría en YAML .
Los corchetes de matriz ([]) y las comas (,) se reemplazan por guiones (-) y líneas nuevas en YAML .
A diferencia de JSON , YAML permite comentarios que comienzan con una marca hash (#). Es relativamente fácil convertir uno de esos formatos en el otro. Sin embargo, tenga en cuenta que perderá comentarios al convertir un documento YAML a JSON .
fuente
Creo que tanto YAML como JSON son muy efectivos. Las dos únicas cosas que realmente dictan cuando una se usa sobre la otra para mí es una, con qué idioma se usa más popularmente. Por ejemplo, si estoy usando Java, Javascript, usaré JSON. Para Java, usaré sus propios objetos, que son más o menos JSON pero que carecen de algunas características, y lo convertiré a JSON si lo necesito o lo haré en JSON en primer lugar. Lo hago porque eso es algo común en Java y facilita que otros desarrolladores de Java modifiquen mi código. Lo segundo es si lo estoy usando para que el programa recuerde atributos, o si el programa está recibiendo instrucciones en forma de un archivo de configuración, en este caso usaré YAML, porque es muy fácil de leer por humanos, tiene buena buscando sintaxis, y es muy fácil de modificar, incluso si no tienes idea de cómo funciona YAML. Luego, el programa lo leerá y lo convertirá a JSON, o lo que sea preferido para ese idioma.
Al final, honestamente no importa. JSON y YAML son leídos fácilmente por cualquier programador experimentado.
fuente
JSON no puede manejar datos grandes comparando yml
No es adecuado para manejar diferentes formatos multimedia.
JSON no tiene una función para admitir 'comentarios'. Esto podría incluirse como un atributo adicional solo.
YAML tiene algunas ventajas sobre JSON como autorreferencia, soporte para tipos de datos complejos, literales de bloque incrustados, comentarios y más.
fuente