Comparación JSON y XML [cerrado]


Quiero saber cuál es más rápido: XML y JSON? ¿Cuándo usar cuál ?

 238
Author: Alan Turing, 2011-02-01

6 answers

Antes de responder cuándo usar cuál, un poco de fondo:

Editar: Debo mencionar que esta comparación es realmente desde la perspectiva de usarlos en un navegador con JavaScript. No es la forma en que cualquier formato de datos tiene para ser utilizado, y hay un montón de buenos analizadores que cambiarán los detalles para que lo que estoy diciendo no sea del todo válido.

JSON es más compacto y (en mi opinión) más legible en la transmisión puede ser "más rápido", simplemente porque se transfieren menos datos.

En el análisis, depende de su analizador. Un analizador que convierte el código (ya sea JSON o XML) en una estructura de datos (como un mapa) puede beneficiarse de la naturaleza estricta de XML ( Esquemas XML desambiguar la estructura de datos muy bien) - sin embargo, en JSON el tipo de elemento (Cadena/Número/Objeto JSON anidado) se puede inferir sintácticamente, por ejemplo:

myJSON = {"age" : 12,
          "name" : "Danielle"}

El analizador no necesita ser lo suficientemente inteligente para darse cuenta de que 12 representa un número, (y Danielle es una cadena como cualquier otra). Así que en javascript podemos hacer:

anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False

En XML tendríamos que hacer algo como lo siguiente:

<person>
    <age>12</age>
    <name>Danielle</name>
</person>

(como un aparte, esto ilustra el punto de que XML es bastante más detallado; una preocupación por la transmisión de datos). Para usar estos datos, los ejecutamos a través de un analizador, luego tendríamos que llamar a algo como:

myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True

En realidad, un buen analizador podría escribir el age para usted (por otro lado, es posible que no quiera que lo haga). ¿Qué está pasando cuando acceder a estos datos es-en lugar de hacer una búsqueda de atributos como en el ejemplo JSON anterior - estamos haciendo una búsqueda de mapa en la clave name. Podría ser más intuitivo formar el XML de esta manera:

<person name="Danielle" age="12" />

Pero todavía tendríamos que hacer búsquedas de mapas para acceder a nuestros datos:

myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");

EDITAR: Original:

En la mayoría de los lenguajes de programación (no todos, por cualquier tramo) una búsqueda de mapa como este será más costoso que una búsqueda de atributos (como obtuvimos anteriormente cuando analizamos el JSON).

Esto es engañoso: recuerde que en JavaScript (y otros lenguajes dinámicos) no hay ninguna diferencia entre una búsqueda de mapa y una búsqueda de campo. De hecho, una búsqueda de campo es solo una búsqueda de mapa.

Si quieres una comparación que valga la pena, lo mejor es compararla: haz los benchmarks en el contexto en el que planeas usar los datos.

Como he estado escribiendo, Felix Kling ya ha presentado una respuesta bastante sucinta comparándolos en términos de cuándo usar cada uno, así que no iré más lejos.

 207
Author: jelford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-25 01:00:24

Faster no es un atributo de JSON o XML o un resultado que una comparación entre ellos produciría. Si hay alguno, entonces es un atributo de los analizadores o el ancho de banda con el que transmite los datos.

Aquí está (el comienzo de) una lista de ventajas y desventajas de JSON y XML:


JSON

Pro:

  • Sintaxis simple, que resulta en menos sobrecarga de "marcado" en comparación con XML.
  • Fácil de usar con JavaScript como el el marcado es un subconjunto de la notación literal de objetos JS y tiene los mismos tipos de datos básicos que JavaScript.
  • JSON Schema for description and datatype and structure validation{[15]]}
  • JSONPath para extraer información en estructuras profundamente anidadas

Contra:

  • Sintaxis simple, solo se admiten un puñado de tipos de datos diferentes.

XML

Pro:

  • marcado Generalizado; es posible para crear "dialectos" para cualquier tipo de propósito
  • XML Schema para el tipo de datos, validación de estructura. También permite crear nuevos tipos de datos
  • XSLT para la transformación en diferentes formatos de salida
  • XPath/XQuery para extraer información en estructuras profundamente anidadas
  • soporte integrado para espacios de nombres

Contra:

  • Relativamente prolijo en comparación con JSON (resulta en más datos para la misma cantidad de información).

Así que al final tienes que decidir qué necesitas . Obviamente, ambos formatos tienen sus casos de uso legítimos. Si en su mayoría va a usar JavaScript, entonces debe ir con JSON.

Por favor, siéntase libre de agregar pros y contras. No soy un experto en XML;)

 223
Author: Felix Kling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-09 09:15:07

La velocidad de procesamiento puede no ser el único asunto relevante, sin embargo, como esa es la pregunta, aquí hay algunos números en un benchmark: JSON vs.XML: Algunos números duros sobre verbosidad. Para la velocidad, en este simple benchmark, XML presenta una sobrecarga del 21% sobre JSON.

Una nota importante sobre la verbosidad, que es como dice el artículo, la queja más común: esto no es tan relevante en la práctica (ni los datos XML ni JSON son típicamente manejados por humanos, sino por máquinas), incluso si por la cuestión de velocidad, requiere un tiempo razonable más para comprimir.

También, en este punto de referencia, se procesó una gran cantidad de datos, y una aplicación web típica no transmitirá trozos de datos de tales tamaños, tan grandes como 90MB, y la compresión puede no ser beneficiosa (para trozos de datos lo suficientemente pequeños, un trozo comprimido será más grande que el trozo sin comprimir), por lo que no es aplicable.

Aún así, si no hay compresión involucrada, JSON, como obviamente más conciso, pesará menos sobre el canal de transmisión, especialmente si se transmite a través de una conexión WebSocket, donde la ausencia de la sobrecarga HTTP clásica puede hacer la diferencia en la ventaja de JSON, aún más significativa.

Después de la transmisión, los datos deben ser consumidos, y esto cuenta en el tiempo total de procesamiento. Si se van a transmitir datos lo suficientemente grandes o complejos, la falta de un esquema comprobado automáticamente por un analizador XML de validación puede requerir más comprobación de los datos JSON; estas comprobaciones tendrían que ser ejecutado en JavaScript, que no se sabe que sea particularmente rápido, por lo que puede presentar una sobrecarga adicional sobre XML en tales casos.

De todos modos, solo las pruebas proporcionarán la respuesta para su caso de uso particular (si la velocidad es realmente la única cuestión, y no estándar ni seguridad ni integridad)).

Actualización 1: vale la pena mencionar, es EXI, el formato XML binario, que ofrece compresión a un costo menor que el uso de Gzip, y ahorra el procesamiento necesario para descomprimir XML comprimido. EXI es a XML, lo que BSON es a JSON. Tenga una visión general rápida aquí, con alguna referencia a la eficiencia tanto en el espacio como en el tiempo: EXI: ¿El último estándar binario?.

Actualización 2: también existe un binario XML informes de rendimiento, llevado a cabo por el W3C, como la eficiencia y la baja huella de memoria y CPU, también es un asunto para el área XML también: Efficient XML Interchange Evaluation.

Actualización 2015-03-01

Vale la pena ser notado en este contexto, ya que La sobrecarga HTTP se planteó como un problema: la IANA ha registrado la codificación EXI (el XML binario eficiente mencionado anteriormente), como una Codificación de contenido a para el protocolo HTTP (junto con compress, deflate y gzip). Esto significa que EXI es una opción que se puede esperar que sea entendida por los navegadores entre posiblemente otros clientes HTTP. Ver Parámetros del Protocolo de Transferencia de Hipertexto (iana.org).

 20
Author: Hibou57,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-01 05:47:14

Encontré este artículo en digital bazaar realmente interesante. Citando sus citas de Norma:

Acerca de JSON pros:

Si todo lo que desea pasar son valores atómicos o listas o hashes de atomic values, JSON tiene muchas de las ventajas de XML: es directamente utilizable a través de Internet, soporta una amplia variedad de aplicaciones, es fácil escribir programas para procesar JSON, tiene pocos características opcionales, es humano-legible y razonablemente claro, su diseño es formal y conciso, los documentos JSON son fáciles de crear, y utiliza Unicode. ...

Acerca de XML pros:

XML se ocupa notablemente bien de toda la riqueza de no estructurados datos. No estoy preocupado por el futuro de XML en absoluto, incluso si su muerte se celebra alegremente por un cuadro de diseñadores de API web.

Y no puedo resistirme a meter un " Te lo dije!"token away in my Escritorio. Espero ver lo que la gente JSON hacer cuando son se le pidió que desarrollara API más ricas. Cuando quieren intercambiar menos bien datos estructurados, ¿lo colocarán en JSON? Veo ocasional menciones de un lenguaje de esquema para JSON, ¿seguirán otros lenguajes? ...

Personalmente estoy de acuerdo con Norm. Creo que la mayoría de los ataques a XML provienen de Desarrolladores Web para aplicaciones típicas, y no realmente de desarrolladores de integración. Pero esa es mi opinión! ;)

 15
Author: Christian Vielma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-20 00:42:57

El XML (extensible Markup Language) se utiliza a menudo XHR porque este es un lenguaje de radiodifusión estándar, lo que puede ser utilizado por cualquier lenguaje de programación, y es compatible tanto con el servidor como con el cliente, por lo que esta es la solución más flexible. El XML se puede separar para más partes para que un grupo específico pueda desarrollar la parte del programa, sin afectar a las otras partes. El formato XML también puede ser determinado por el XML DTD o XML Schema (XSL) y puede ser probado.

El JSON a formato de intercambio de datos que se está volviendo más popular como el formato posible de aplicaciones JavaScript. Básicamente se trata de una matriz de notación de objetos. JSON tiene una sintaxis muy simple por lo que se puede aprender fácilmente. Y también el soporte de JavaScript para analizar JSON con la función eval. Por otro lado, la función eval tiene negativos. Por ejemplo, el programa puede ser muy lento analizando JSON y debido a la seguridad el eval puede ser muy arriesgado. Esto no significa que el JSON no es bueno, solo tenemos que ser más cuidado.

Mi sugerencia es que debe usar JSON para aplicaciones con intercambio de datos ligero, como juegos. Debido a que no tiene que preocuparse realmente por el procesamiento de datos, esto es muy simple y rápido.

El XML es mejor para los sitios web más grandes, por ejemplo, sitios de compras o algo así. El XML puede ser más seguro y claro. Puede crear una estructura de datos básica y un esquema para probar fácilmente la corrección y separarla en partes fácilmente.

Te sugiero que uses XML debido a la velocidad y la seguridad, pero JSON para cosas ligeras.

 15
Author: Gergely Fehérvári,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-24 17:42:35

Lo importante de JSON es mantener la transferencia de datos cifrada por razones de seguridad. No hay duda de que JSON es mucho más rápido que XML. He visto XML tomar 100ms donde como JSON solo tomó 60ms. JSON datos es fácil de manipular.

 7
Author: Godfather,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-29 17:42:21