¿Por qué todos eligen JSON sobre XML para jQuery?

Pensé que XML es muy portátil y puede usarse como una mini base de datos. He visto XML usado en todas partes. Incluso veo grandes empresas cambiando a JSON . Incluso Microsoft ha integrado soporte para JSON. ¿Qué es todo el bombo sobre JSON?

Básicamente, debido a que JavaScript es reconocido nativamente por JavaScript, es realmente liviano, minimalista y altamente portátil porque se basa únicamente en dos estructuras fundamentales:

  • Una colección de pares de nombre / valor. En varios idiomas, esto se realiza como un objeto, registro, estructura, diccionario, tabla hash, lista de claves o matriz asociativa.
  • Una lista ordenada de valores. En la mayoría de los lenguajes, esto se realiza como una matriz, vector, lista o secuencia.

XML realmente no comienza a brillar hasta que comiences a mezclar diferentes esquemas de espacio de nombres. Luego verá que JSON comienza a caerse, pero si solo necesita un formato de serialización para sus datos, JSON es más pequeño, liviano, más legible y generalmente más rápido que XML.

Considero que un gran beneficio de JSON sobre XML es que no tengo que decidir cómo formatear los datos. Como algunos han demostrado, existen numerosas maneras de hacer incluso estructuras de datos simples en XML, como elementos, como valores de atributos, etc. Luego, debes documentarlo, escribir XML Schema o Relax NG o alguna otra basura … Es un desastre.

XML puede tener sus ventajas, pero para el intercambio de datos básicos, JSON es mucho más compacto y directo. Como desarrollador de Python, no existe impedancia de impedancia entre los tipos de datos simples en JSON y en Python. Entonces, si estaba escribiendo un controlador del lado del servidor para una consulta de AJAX que preguntaba sobre las condiciones de la nieve para una estación de esquí en particular, crearía un diccionario de la siguiente manera:

conditions = { 'new_snow_24': 5.0, 'new_snow_48': 8.5, 'base_depth': 88.0, 'comments': 'Deep and steep!', 'chains_required': True, } return simplejson.dumps(conditions) # Encode and dump `conditions` as a JSON string 

Cuando se traduce a través de JSON (usando una biblioteca como ‘simplejson’ para Python), la estructura JSON resultante se ve casi idéntica (excepto en JSON, los booleanos tienen un formato inferior).

La deencoding de esa estructura solo requiere un analizador JSON, ya sea para Javascript o Objective-C para una aplicación nativa de iPhone o C # o un cliente de Python. Los flotantes se interpretarían como flotantes, las cadenas como cadenas y los booleanos como booleanos. Utilizando la biblioteca ‘simplejson’ en Python, una simplejson.loads(some_json_string) me devolvería una estructura de datos completa como la que hice en el ejemplo anterior.

Si escribo XML, tendré que decidir si hago elementos o atributos. Ambos de los siguientes son válidos:

  5 8.5 yes deep and steep!   deep and steep!  

Por lo tanto, no solo tengo que pensar en los datos que deseo enviarle al cliente, sino que debo pensar en cómo formatearlos. XML, si bien es más simple que el SGML simple al ser más estricto con sus reglas, todavía proporciona demasiadas formas de pensar sobre esos datos. Entonces tendría que generarlo. No podía simplemente tomar un diccionario de Python (u otra estructura de datos simple) y decir “ir a ti mismo en mi XML”. No pude recibir un documento XML e inmediatamente decir “siéntate a ti mismo en objetos y estructuras de datos” sin escribir un analizador personalizado, o sin requerir la sobrecarga adicional de XML Schema / Relax NG y otras tareas similares.

A falta de eso, es mucho más fácil y mucho más directo codificar y decodificar datos en JSON, especialmente para intercambios rápidos. Esto puede aplicarse más a las personas que provienen de un entorno de lenguaje dynamic, ya que los tipos de datos básicos (listas, diccionarios, etc.) integrados en JavaScript / JSON se asignan directamente a los mismos o similares tipos de datos en Python, Perl, Ruby, etc.

El rendimiento de JSON no es muy diferente de XML para la mayoría de los casos de uso, JSON no es muy adecuado y legible para estructuras de nidos profundos … se encontrará con]]]}], lo que dificulta la depuración

Es liviano en comparación con XML. Si necesita escalar, ¡reduzca sus requisitos de ancho de banda!

Comparar JSON

  [ { color: "red", value: "#f00" }, { color: "green", value: "#0f0" }, { color: "blue", value: "#00f" }, { color: "cyan", value: "#0ff" }, { color: "magenta", value: "#f0f" }, { color: "yellow", value: "#ff0" }, { color: "black", value: "#000" } ] 

a XML:

    red #f00   green #0f0   blue #00f   cyan #0ff   magenta #f0f   yellow #ff0   black #000   

Solo una anécdota de mi propia experiencia personal:

Escribí un pequeño directorio de Javascript, primero con los datos en XML, y luego lo adapté para usar JSON para poder ejecutarlos uno al lado del otro y comparar las velocidades con Firebug. El JSON terminó siendo aproximadamente 3 veces más rápido (350-400 ms frente a 1200-1300 ms para mostrar todos los datos). Además, como han señalado otros, el JSON es mucho más fácil para los ojos y el tamaño del archivo fue un 25% menor debido al marcado más delgado.

           

Con atributos, XML es agradable. Pero, por alguna razón, el XML hecho en casa generalmente está hecho al 100% de elementos y es feo.

El consumo fácil por JavaScript puede ser una de las razones ..

JSON es el mejor para el consumo de datos en aplicaciones web de servicios web por su tamaño y facilidad de uso, especialmente debido al soporte integrado en JavaScript . Imagine la sobrecarga de cómputo para analizar un fragmento xml en comparación con la búsqueda instantánea en JSON.

Un muy buen ejemplo es JSON-P. Puede recuperar datos de un servicio web envuelto en una llamada de función de callback, como my_callback({"color": "blue", "shape":"square"}); dentro de una etiqueta generada dinámicamente para que los datos puedan ser consumidos directamente en la función my_callback() . No hay forma de acercarse a esta conveniencia usando XML.

XML sería el formato de elección para documentos grandes, donde tiene un marco de representación de páginas de datos en múltiples formatos usando XSLT. XML también se puede usar con archivos de configuración de aplicaciones para facilitar la lectura entre muchos otros usos.

Nadie aquí ha mencionado la principal ventaja de XML: reglas de validación (DTD, XSD). Mis conclusiones, habiendo usado ambos:

  • JSON es perfecto para ajax, especialmente si desarrolla el lado del servidor y del cliente usted mismo. ¡Básicamente crea objetos js directamente en su secuencia de comandos del servidor!
  • XML brilla en entornos corporativos, cuando tiene que establecer estándares de intercambio de datos entre grandes organizaciones burocráticas. A menudo, una parte desarrolla su parte meses antes que otra, por lo que realmente se beneficia al validar sus solicitudes contra XSD acordado. Además, en las grandes corporaciones, la transferencia de datos a menudo se traduce entre diferentes sistemas. Esta es también la fortaleza de XML, piense en XSLT. Ejemplo: conversión sin código en JSON: p

Por supuesto, se está desarrollando json-schema, pero no encontrará soporte integrado para él en ninguna parte.

Soy un fanboy de ambos, tienen diferentes puntos fuertes.

Ahora que hay codificadores y decodificadores JSON para la mayoría de los idiomas, no hay razón para NO usar JSON para usos donde tenga sentido (y eso es probablemente el 90% de los casos de uso para XML).

Incluso he escuchado sobre el uso de cadenas JSON en grandes bases de datos SQL para facilitar los cambios en el esquema.

Honestamente, no hay mucho diferente entre JSON y XML en el hecho de que pueden representar todo tipo de datos. Sin embargo, XML es sintácticamente más grande que JSON y eso lo hace más pesado que JSON.

JSON no tiene fallas de impedancia con la progtwigción de JavaScript. JSON puede contener enteros, cadenas, listas, matrices. XML es solo elementos y nodos que deben analizarse en enteros y demás para poder consumirlos.

Ambos son geniales y muy portátiles. Sin embargo, JSON ha ido ganando popularidad ya que se serializa en menos caracteres en la mayoría de los casos (lo que se traduce en un tiempo de entrega más rápido) y ya que coincide con la syntax del objeto JavaScript se puede traducir directamente a un objeto en memoria que hace que Ajax sea ​​mucho más fácil implementar.

XML sigue siendo genial. JSON es simplemente el “último y mejor” en comparación con XML.

Se analiza fácilmente mediante JavaScript y es liviano (un documento en JSON es más pequeño que un documento XML que contiene los mismos datos).

JSON es efectivamente serializado JavaScript en el que puede evaluar (aJsonString) directamente en un objeto JavaScript. En el interior de un navegador, JSON es perfecto para JavaScript. Al mismo tiempo, JavaScript es un lenguaje dynamic muy débilmente tipado y no puede aprovechar de forma nativa toda la información de tipo específico disponible contenida dentro de un documento Xml / Xsd. Este metadato adicional (que es ideal para la interoperabilidad) es un obstáculo en JavaScript, por lo que es más tedioso y complicado trabajar con él.

Tamaño vs rendimiento

Si estás en un navegador, JSON es más rápido de serializar / deserializar, ya que es más simple, más compacto y, lo que es más importante, compatible de forma nativa. Tengo algunos benchmarks de bases de datos de Northwind disponibles que comparan el tamaño y la velocidad entre los diferentes serializadores disponibles. En la biblioteca de clases base, el serializador XML DataContract de Microsoft es más de un 30% más rápido que su servidor JSON. Aunque esto tiene más que ver con el esfuerzo que Microsoft puso en su serializador XML ya que pude desarrollar un JsonSerializer que es más de 2.6 veces más rápido que su XML. En cuanto a las cargas útiles basadas en los puntos de referencia, parece que XML es más o menos el doble del tamaño de JSON. Sin embargo, esto puede explotar rápidamente si su carga XML utiliza muchos espacios de nombres diferentes dentro del mismo documento.

XML es aceite de serpiente hinchado en la mayoría de las situaciones. JSON le brinda la mayoría de los beneficios sin la hinchazón.

Una gran ventaja además de las mencionadas aquí. Para los mismos datos, hay varias maneras de representarlo como un archivo XML, pero solo una forma con JSON, elimina la ambigüedad 🙂

No soy un experto con diferencia, pero de las diversas compañías para las que he trabajado generalmente utilizamos XML en entornos de datos pequeños o valores de configuración (web.config es un gran ejemplo).

Cuando tiene grandes cantidades de datos, en general, querrá informar sobre esos datos. Y XML no es una gran fuente para informar. En el gran esquema de cosas, parece que es más fácil reportar / buscar una base de datos transaccional que XML.

¿Esto tiene sentido? Como dije antes, no soy un experto pero, según mi experiencia, este parece ser el caso. Además, creo que Microsoft integró el soporte JSON debido a la ola de desarrolladores que se trasladaron a acciones guiadas o del lado del cliente para mejorar las imágenes de la interfaz de usuario ( Ajax ) y Ajax de Microsoft no se utilizó tanto como otras bibliotecas como jQuery y MooTools ( YUI de Yahoo también está en esa mezcla) debido a su hermosa integración de objetos serializables usando JSON.

Me encuentro escribiendo código ahora implementando el serializador JSON en mi código VB. Es MUY fácil y desde un punto de vista de actualización / modificación, no se puede superar. Es la forma de Microsoft de mantenernos adictos a VS, supongo. Recientemente, convertí una aplicación empresarial al uso de Ajax (a través de jQuery) y al formato JSON. Tomó aproximadamente 2 semanas para hacerlo. De hecho, le agradezco a Microsoft por integrarlo porque sin él, tendría que escribir un código extra.