Comparación JSON y XML [cerrado]

273

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

Durga Dutt
fuente
6060
¿Más rápido dónde? ¿Transmisión? ¿Procesando? Generando? Ambos no tienen pies, sabes. Es probable que JSON sea "más rápido" de alguna manera, ya que tiene menos sobrecarga de marcado. Por otro lado, XML proporciona XMLSchema para garantizar tipos, estructura ... por lo tanto, validez. Hay XSLT para transformar XML en casi cualquier otro formato de salida ... Depende de lo que necesite .
Felix Kling
2
Consulte también otras preguntas anteriores: stackoverflow.com/search?q=json+vs+xml
Felix Kling
16
BLARG! Esto es algo que realmente quería saber, y me alegré mucho de que estuviera aquí, y las respuestas fueron PERFECTAS. MALO PARA USTEDES , moderadores: tal vez sea hora de extender sus riles de compromiso. ¡Bien por ti al permitir que se responda, al menos!
Mark Gerolimatos
No me importa si esta publicación llega extremadamente tarde al juego, pero estoy de acuerdo. Si una pregunta es un engaño, irrelevante o en conflicto con los términos del servicio, quizás (el hilo cerrado / inútil) no debería ser lo primero que surge en una búsqueda. (por cierto, este es el segundo resultado [duplicado] que aparece) Estoy de acuerdo en que quizás las respuestas deberían ser claras y concisas, pero si el resultado después del resultado es un hilo cerrado y sin respuesta lleno de comentarios fuera del tema (lo que va en contra de los términos de uso), entonces No ayuda a nadie.
Izaac Corbett
2
Aunque la pregunta formulada no está clara, esta NO es una pregunta basada en la opinión.
qwr

Respuestas:

221

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

editar: Debo mencionar que esta comparación es realmente desde la perspectiva de usarlos en un navegador con JavaScript. No es la forma en formato de datos o bien tiene que ser utilizado, y hay un montón de buenos programas de análisis que cambiarán los detalles para hacer lo que estoy diciendo no muy válida.

JSON es a la vez 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 (los esquemas XML desambiguan muy bien la estructura de datos); sin embargo, en JSON el tipo de elemento (String / 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 como para darse cuenta de que 12representa un número (y Daniellees una cadena como cualquier otra). Entonces 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, lo ejecutaremos a través de un analizador, luego tendremos 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 escribirlo agepor ti (por otro lado, es posible que no quieras que lo haga). Lo que sucede cuando accedemos a estos datos es que, 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. Puede ser más intuitivo formar el XML de esta manera:

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

Pero aún 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, de ninguna manera), una búsqueda de mapa como esta será más costosa que una búsqueda de atributos (como lo hicimos arriba cuando analizamos el JSON).

Esto es engañoso: recuerde que en JavaScript (y otros lenguajes dinámicos) no hay 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 desea una comparación que realmente valga la pena, lo mejor es compararla: realice las evaluaciones comparativas en el contexto en el que planea utilizar los datos.

Mientras escribía, Felix Kling ya ha presentado una respuesta bastante sucinta comparándolas en términos de cuándo usar cada una, por lo que no continuaré más.

jelford
fuente
Solo una nota pedante ... Una búsqueda de campo de JavaScript no es necesariamente una búsqueda de mapa. Depende del objeto y el campo en cuestión. Los objetos pequeños (especialmente aquellos que no tienen propiedades adjuntas después de la construcción) a menudo utilizan "tipos rápidos" optimizados con cachés en línea en los motores JS modernos, y recurren a bolsas de propiedades más lentas (búsquedas de mapas) para objetos con una gran cantidad de propiedades o casos en los que la estructura de un objeto cambia con frecuencia.
Brandon Paddock
2
Creo que JSON es más fácil de analizar para los humanos, pero XML es más fácil de analizar para las computadoras.
Jus12
55
No es cierto, por ejemplo, en PHP, JSON usa json.so sin dependencias a 78k, XML por otro lado, necesita xml.so o xmlreader.so a 54k / 32k, pero también requiere libxml2.so que 1.4megs . Más código hace que se tarde más en procesar y usar más memoria. Sin mencionar que XML, debido a su estructura de nodos / árbol, tiene referencias circulares, lo que puede ser un dolor en cualquier lenguaje que no tenga referencias débiles. He encontrado en varios idiomas que el analizador XML es MUCHO más grande (ocupa más memoria y usa más memoria) que cualquiera de sus analizadores JSON equivalentes.
Rahly
¿Por qué combina el problema de estado estricto de JS con esta comparación no relacionada? Referencias dobles o triples signos iguales.
atilkan
1
@atilkan porque muchos analizadores interpretan cadenas numéricas como números o almacenan números como cadenas numéricas.
mazunki
244

Más rápido no es un atributo de JSON o XML o un resultado que arrojaría una comparación entre ellos. 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 gastos generales de "marcado" en comparación con XML.
  • Fácil de usar con JavaScript, ya que el marcado es un subconjunto de notación literal de objetos JS y tiene los mismos tipos de datos básicos que JavaScript.
  • Esquema JSON para descripción y tipo de datos y validación de estructura
  • JsonPath para extraer información en estructuras profundamente anidadas

Estafa:

  • Sintaxis simple, solo se admiten unos pocos tipos de datos diferentes.

  • No hay soporte para comentarios.


XML

Pro:

  • Marcado generalizado; es posible crear "dialectos" para cualquier tipo de propósito
  • Esquema XML para tipo de datos, validación de estructura. También hace posible crear nuevos tipos de datos
  • XSLT para transformación en diferentes formatos de salida
  • XPath / XQuery para extraer información en estructuras profundamente anidadas
  • construido en soporte para espacios de nombres

Estafa:

  • Relativamente prolijo en comparación con JSON (da como resultado 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ítimo. Si vas a usar JavaScript principalmente, entonces deberías usar JSON.

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

Felix Kling
fuente
20
Otro Con para JSON y Pro para XML: JSON no admite referencia de objeto (cíclico o no), XML sí. XML hace esto forzando que el idatributo sea único dentro del documento.
Earth Engine
77
@EarthEngine Actually Json.Net ( json.codeplex.com ) admite referencias de objetos: james.newtonking.com/projects/json/help/index.html?topic=html/… .
Dmitrii Lobanov
22
@DmitryLobanov: Simplemente agregan algunas restricciones adicionales al estándar JSON, pero otras herramientas JSON no lo reconocen. Por lo tanto, no es "nativo" para JSON. Sin embargo, para XML, la restricción está escrita en el estándar, por lo que es nativa.
Earth Engine
1
¿Qué pasa con el esquema JSON? en.wikipedia.org/wiki/JSON#JSON_Schema
John Doe
55
JSON tiene arrays incorporados, así como un valor "nulo". Mientras que en XML necesita algún tipo de convención en todos los analizadores de esquemas. También hay proyectos de conversión similares a XSLT para JSON (por ejemplo, github.com/emlynoregan/bOTLjs )
Vasyl Boroviak
22

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 punto de referencia: JSON vs. XML: Algunos números concretos sobre la verbosidad . Para la velocidad, en este punto de referencia simple, XML presenta una sobrecarga del 21% sobre JSON.

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

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

Aún así, si no se trata de compresión, JSON, como obviamente más terser, 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 marcar la diferencia en la ventaja de JSON, incluso más significativo.

Después de la transmisión, los datos deben ser consumidos, y esto cuenta en el tiempo de procesamiento general. Si se van a transmitir datos suficientemente grandes o complejos, la falta de un esquema verificado automáticamente por un analizador XML de validación puede requerir una mayor verificación de los datos JSON; estas comprobaciones tendrían que ejecutarse 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 el único asunto, y no es estándar, ni seguridad ni integridad ...).

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

Actualización 2: también existe un informe de rendimiento XML binario, llevado a cabo por el W3C, ya que la eficiencia y la baja memoria y huella de la CPU, también es un tema para el área XML: Evaluación eficiente de intercambio XML .

Actualizar 2015-03-01

Vale la pena notar en este contexto, ya que la sobrecarga de HTTP se planteó como un problema: la IANA ha registrado la codificación EXI (el eficiente XML binario mencionado anteriormente), como una codificación de contenido para el protocolo HTTP (junto con comprimir , desinflar y gzip ) . Esto significa que EXI es una opción que los navegadores pueden comprender entre otros posibles clientes HTTP. Consulte Parámetros del protocolo de transferencia de hipertexto (iana.org) .

Hibou57
fuente
"Para la velocidad, en este punto de referencia simple, XML presenta una sobrecarga del 21% sobre JSON" - hay una gran diferencia en el análisis JSON dependiendo del analizador específico utilizado. Casi no tiene sentido citar un analizador en particular. Lo mismo para XML.
Jeffrey Blattman
17

Encontré este artículo en el bazar digital realmente interesante. Citando sus citas de la norma:

Sobre los profesionales de JSON:

Si todo lo que desea transmitir son valores atómicos o listas o valores hash de valores atómicos, JSON tiene muchas de las ventajas de XML: es directamente utilizable en Internet, admite una amplia variedad de aplicaciones, es fácil escribir programas para procesar JSON, tiene pocas características opcionales, es legible para los humanos y razonablemente claro, su diseño es formal y conciso, los documentos JSON son fáciles de crear y utiliza Unicode. ...

Acerca de los profesionales XML:

XML trata notablemente bien con la riqueza completa de datos no estructurados. No estoy preocupado por el futuro de XML, incluso si su muerte es celebrada alegremente por un grupo de diseñadores de API web.

Y no puedo resistir meter un "¡Te lo dije!" ficha en mi escritorio. Espero ver qué hacen los amigos de JSON cuando se les pide que desarrollen API más completas. Cuando quieran intercambiar datos menos estructurados, ¿lo incluirán en JSON? Veo menciones ocasionales de un lenguaje de esquema para JSON, ¿seguirán otros idiomas? ...

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 de desarrolladores de integración. ¡Pero esa es mi opinión! ;)

Christian Vielma
fuente
¡Así poner! Si el 80% de los desarrolladores activos son javascript kiddies, el 80% expresará su opinión de que JSON es "mejor". Pero cualquiera que use lenguajes mecanografiados se divierte un poco con JSON. { "foo": 42 }¿De qué tipo es ese objeto? A continuación, para fijar la falta de tipo, cosas como esta muestra arriba: { "__type": "Bar", "foo": 42 }. En XML en el tipo de contraste puede ser connotado al nombre del elemento: <Bar><foo>42</foo></Bar>. Solo chicos de lisp y javascript como json;)
BitTickler
15

El XML (Lenguaje de marcado extensible) se usa a menudo XHR porque es un lenguaje de transmisión estándar, lo que puede ser utilizado por cualquier lenguaje de programación y es compatible con el lado del servidor y del 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 las otras partes. El formato XML también puede determinarse mediante el DTD XML o el Esquema XML (XSL) y puede probarse.

El JSON es un formato de intercambio de datos que se está volviendo más popular como el formato posible de las 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 JavaScript admite el análisis de JSON con la evalfunción. Por otro lado, la evalfunción tiene negativos. Por ejemplo, el programa puede ser muy lento al analizar JSON y, debido a la seguridad, evalpuede ser muy arriesgado. Esto no significa que el JSON no sea bueno, solo tenemos que tener 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 el 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.

Le sugiero que use XML debido a la velocidad y la seguridad, pero JSON para cosas livianas.

Gergely Fehérvári
fuente
No estoy votando negativamente, pero tengo curiosidad por ver cómo JSON es una carga útil más pesada o más lenta en general. Se puede aplicar GZip / Deflate. Su sintaxis inherentemente lo hace más pequeño en términos de bytes. JSON también puede definir su esquema como un contrato y ser serializado como tal fácilmente.
Anthony Mason
JSON no necesita ser evaluado para ser analizado.
Yay295
7

Lo importante de JSON es mantener cifrada la transferencia de datos por razones de seguridad. Sin duda, JSON es mucho más rápido que XML. He visto XML tomar 100 ms, mientras que JSON solo tomó 60 ms. Los datos JSON son fáciles de manipular.

Padrino
fuente
55
Estoy de acuerdo, JSON gana la batalla en la transferencia de datos, pero carece de marcado, validación y extensión de los elementos. Es por eso que Google
rastrea
1
El mapa del sitio se definió antes de que json fuera popular, por lo que ese no es el mejor ejemplo. Sitemap también se ve como un servidor a servidor donde XML es más popular que JSON. (JSON realmente solo porque es popular porque es fácil trabajar con JavaScript.)
Matthew Whited
pero Google AMP usa json y no xml
Ashraf