javascript - parse - ¿Cuándo preferir JSON sobre XML?
xml.haschildnodes is not a function (18)
Mi requisito es solo mostrar un conjunto de valores recuperados de la base de datos en un spread. Estoy usando jquery.
Algunas otras cosas que me he encontrado en XML vs JSON relm:
JSON es muy bueno para
- pares nombre / valor
- anidando esos pares
Lo que significa que tiende a gustar una matriz o matriz anidada. Sin embargo, falta JSON
- atributos
- espacio de nombres
Entonces, si combinara dos o más servicios JSON, podría haber conflictos potenciales en el espacio de nombres. Dicho esto, JSON se puede usar para aproximadamente el 90% de las mismas cosas en las que se puede usar XML al intercambiar datos en mi experiencia.
Desde la primera línea en http://json.org/xml.html
El lenguaje de marcado extensible (XML) es un formato de texto derivado del lenguaje de marcado generalizado estándar (SGML). Comparado con SGML, XML es simple. El lenguaje de marcado de hipertexto (HTML), en comparación, es aún más simple. Aun así, un buen libro de referencia sobre HTML tiene un grosor de una pulgada. Esto se debe a que el formateo y la estructuración de los documentos es un asunto complicado. . . .
Claramente, JSON es más rápido, pero es aún más claro que es difícil de leer. Usa JSON para velocidad, usa XML si hay interacción humana y puedes sacrificar la velocidad.
Elegiría XML sobre JSON si necesito validar el fragmento de datos entrantes, porque XML lo admite nativamente a través de XSD.
Encontré este artículo en el bazar digital realmente interesante.
Algunas partes del artículo se citan a continuación.
Acerca de los profesionales de JSON:
Si todo lo que quiere transmitir son valores atómicos o listas o hashes de valores atómicos, JSON tiene muchas de las ventajas de XML: se puede usar directamente en Internet, admite una amplia variedad de aplicaciones, es fácil escribir programas para procesar JSON, tiene pocas características opcionales, es legible por los humanos y razonablemente claro, su diseño es formal y conciso, los documentos JSON son fáciles de crear y usa Unicode. ...
Acerca de los profesionales de XML:
XML trata notablemente bien con la riqueza completa de datos no estructurados. No estoy preocupado por el futuro de XML en absoluto, incluso si su muerte es alegremente celebrada por un grupo de diseñadores de API web.
Y no puedo resistirme a meter un "¡Te lo dije!" recuerdo en mi escritorio. Estoy ansioso por ver qué hacen las personas de JSON cuando se les pide desarrollar API más ricas. Cuando quieran intercambiar datos menos estructurados, ¿lo calzarán en JSON? Veo ocasionalmente menciones de un lenguaje de esquema para JSON, ¿seguirán otros idiomas? ...
Favorece XML sobre JSON cuando cualquiera de estos es verdadero:
- Necesita validación de mensaje
- Estás usando XSLT
- Sus mensajes incluyen un montón de texto marcado
- Necesita interoperar con entornos que no son compatibles con JSON
Favorecer JSON sobre XML cuando todos estos son verdaderos:
- Los mensajes no necesitan ser validados, o validar su deserialización es simple
- No estás transformando mensajes, o transformar su deserialización es simple
- Sus mensajes son en su mayoría datos, no texto marcado
- Los puntos finales de mensajería tienen buenas herramientas JSON
JSON es fácil y más rápido de analizar. XML es un poco más difícil de analizar, y es más lento de analizar y transferir (en la mayoría de los casos).
Como está utilizando jQuery, sugiero usar JSON: jQuery puede recuperar datos JSON y convertirlo en un objeto Javascript automáticamente. De hecho, puede json.org/js.html . XML tendría que ser cruzado manualmente por usted (no sé cómo funciona esto en Javascript, pero es difícil / más molesto en la mayoría de los lenguajes con los que he usado bibliotecas XML).
JSON es la codificación nativa para javascript. Debería ser mucho más rápido y fácil trabajar con él.
JSON siempre es preferible en términos del procesamiento que el navegador del cliente tiene que hacer para analizar los datos. Además, JSON es un formato de intercambio de datos liviano.
El análisis XML siempre consume gran cantidad de recursos del navegador y debe evitarse tanto como podamos a menos que se requiera de otro modo.
La mayoría de las tecnologías web más nuevas funcionan con JSON, por lo que definitivamente es una buena razón para usar JSON. Una gran ventaja es que en XML puede representar de diferentes maneras la misma información, que en JSON es más directa.
También JSON en mi humilde opinión es mucho más claro que XML, lo que me da una clara ventaja. Y si está trabajando con .NET, Json.NET es un ganador claro para ayudarlo a trabajar con JSON.
Por lo general, JSON es más compacto y más rápido de analizar.
Prefiere XML si:
- Necesita procesar los datos en el cliente, y puede aprovechar XSL para eso. Lo más probable es que la cadena XML + XSL funcione más rápido que JSON + JavaScript, especialmente para grandes cantidades de datos.
- Un buen caso es convertir los datos en un fragmento de HTML.
- Varios casos heredados:
- Existe un servicio XML existente, y es una molestia reescribirlo con JSON por algunos motivos.
- Debe volver a publicar esta información como XML después de un procesamiento ligero con la entrada del usuario.
Un caso importante de (casi) XML: intente detectar cuando enviar fragmentos de HTML es más beneficioso que enviar datos sin formato. AHAH puede hacer maravillas en aplicaciones simples, pero a menudo pasa desapercibido. Por lo general, este estilo asume que un servidor envía fragmentos de HTML que se incluirán en la página web sin procesamiento.
Por lo general, en los casos de AHAH, CSS se aprovecha al máximo para hacer un masaje visualmente e implementar condicionales simples como ocultar / mostrar partes relevantes del fragmento utilizando configuraciones específicas del usuario o específicas de la aplicación.
Tanto XML como JSON son compatibles con Microsoft. Los literales XML fueron la nueva característica genial en VB 9. En la próxima versión de ASP.NET 4.0, JSON es imprescindible para aprovechar el poder de las plantillas del lado del cliente.
A partir de la pregunta que ha hecho, parece que JSON podría ser la opción para usted, ya que es fácil de procesar en el lado del cliente con o sin jQuery.
Tengo una publicación en el blog sobre el tema que detalla la historia de los protocolos web (es decir, SOAP, XML, JSON, REST, POX, etc.) que proporciona un resumen, así como algunas ventajas y desventajas de cada uno: http://www.servicestack.net/mythz_blog/?p=154
De hecho, creo que puede dibujar muchas similitudes entre XML y JSON al comparar las diferencias entre los lenguajes dinámico (JSON) y estático (XML).
Básicamente, XML es un formato de serialización más rígido y rígido que puede verificarse opcionalmente con un esquema adjunto (que es un XSD o DTD). Los XSD son bastante elaborados y le permiten describir muchos tipos diferentes, como fechas, horas, enumeraciones, tipos definidos por el usuario e incluso herencia de tipos, etc. SOAP construye de manera efectiva sobre el conjunto de características XML proporcionando una manera estandarizada de describir sus servicios web ( por ejemplo, tipos y operaciones) a través de un WSDL. La verbosidad y la complejidad de la especificación WSDL significa que puede ser más tedioso desarrollar con, pero al mismo tiempo, hay muchas más herramientas disponibles para usted y la mayoría de los idiomas modernos proporcionan herramientas automatizadas para generar proxies de sus clientes, llevando algo de la carga apagado cuando se trata de interoperar con servicios externos. (Aunque, al mismo tiempo, considero que los proxies generados son una carga para ellos cuando se trata de servicios web que cambian con frecuencia).
Todavía recomendaría usar XML para sus servicios web si tiene un "servicio empresarial" bien definido que no está sujeto a cambios frecuentes o se debe acceder a su servicio web desde diferentes idiomas.
A pesar de todos sus beneficios, XML viene con inconvenientes también. Se basa en espacios de nombres para proporcionar un formato extensible y permite especificar atributos y elementos dentro del mismo documento. Tener diferentes espacios de nombres dentro de un documento significa una gran cantidad de tiempo cuando se utiliza un analizador Xml para extraer datos, también deberá proporcionar el espacio de nombres de cada elemento que desee recuperar / atravesar. También extrapola la carga útil por lo que es más detallado de lo que necesita ser. Tener la opción de generar atributos y elementos significa que sus clases no se asignan correctamente a un documento XML. Estas características por sí mismas lo convierten en un ajuste programático deficiente para la mayoría de los idiomas, por lo que es más tedioso y engorroso trabajar con él. Microsoft lo ha reconocido y simplificado un poco con su serializador DataContract al eliminar los atributos XML y simplemente tener las propiedades de su mapa de clase solo para los elementos Xml.
Por otro lado, JSON es completamente opuesto a XML en muchos aspectos, ya que está muy poco tipado y solo tiene soporte simple para tipos básicos: Number, Bool, string, Objects y Arrays. Todo lo demás esencialmente tiene que caber en una cuerda. Esto no es genial cuando intenta comunicarse a través de límites de idioma, ya que tendrá que cumplir algunas especificaciones no estándar fuera de banda si desea admitir tipos más específicos. Por el lado positivo, su conjunto de características limitadas tiene un buen ajuste programático para la mayoría de los idiomas, y es perfectamente adecuado para JavaScript, ya que una cadena JSON se puede evaluar directamente en el objeto JavaScript.
Tamaño y rendimiento
Tengo algunos benchmarks de bases de datos de Northwind disponibles que comparan el tamaño y la velocidad entre las implementaciones de Microsoft y JSON de Microsofts. Básicamente, XML tiene más de dos veces el tamaño de JSON, pero al mismo tiempo parece que Microsoft se esforzó mucho para optimizar su DataContractSerializer XML, ya que es más de un 30% más rápido que su JSON. Parece que tienes que hacer concesiones entre el tamaño y el rendimiento. No estoy contento con este hecho, decidí escribir mi propio JsonSerializer rápido que ahora es 2.6 JsonSerializer rápido que el XML de MS, así que lo mejor de ambos mundos :).
Teniendo en cuenta su caso específico en el que ya está haciendo javascript en el lado del cliente, iría con JSON por estos motivos:
Como JSON es nativo de javascript, debe escribir menos código en el lado del cliente: simplemente
eval()
(o, mejor aún,JSON.parse()
) la cadena JSON y obtenga un objeto que pueda usar.Al mismo tiempo, la evaluación de JSON en el lado del cliente será más eficiente y, por lo tanto, más rápida.
La serialización JSON produce cadenas más cortas que XML. El uso de JSON reducirá la cantidad de datos que se ejecutan a través del cable y mejorará el rendimiento en ese sentido.
Aquí hay más lecturas: http://www.subbu.org/blog/2006/08/json-vs-xml
Usando JSON
- Si los datos van a ser consumidos por JavaScript en el navegador.
- El modelo de datos es simple y no complejo (demasiados objetos compuestos).
Usando XML
- Principalmente en un entorno de SOA en el que está integrando varios servicios en plataformas y tecnologías heterogéneas.
- SOAP tiene la ventaja de que se puede transmitir a través de diferentes protocolos distintos de HTTP.
- Fácil de usar en herramientas de transformación de modelos de datos como XSLT, XSL-FO, etc.
- Gran cantidad de soporte de base de datos para almacenar / consultar (XQuery) datos XML.
- XML es un formato de datos muy maduro, por lo que encontrará muchas herramientas para respaldar cualquier caso de uso que se le ocurra.
Uso JSON a menos que deba usar XML. Es más simple de entender, y (debido a que requiere menos sobrecarga de configuración) es más fácil programar para lectura y escritura si las bibliotecas están disponibles en su contexto, y ahora son bastante ubicuas.
Cuando Amazon expuso sus catálogos por primera vez como un servicio web, ofrecieron tanto JSON como XML. Algo así como el 90% de los implementadores eligieron JSON.
Utilizo JSON para cualquier tipo de configuración, intercambio de datos o mensajes. Utilizo XML solo si tengo que hacerlo por otros motivos o para marcar semánticamente datos de documentos.
Cuando desciendes por la ruta JSON, te encuentras con los mismos problemas que XML enfrentó hace 10 años:
Mezclar datos de dos fuentes diferentes en un paquete JSON puede hacer que las etiquetas de los elementos choquen entre sí. Mezcle una hoja de embalaje y una factura, y de repente la dirección De puede significar algo bastante diferente. Es por eso que XML tiene espacios de nombres .
La conversión entre diferentes estructuras JSON requeriría escribir código mundano. Una forma más declarativa de asignar datos facilitaría el trabajo. Es por eso que XML tiene XSLT .
La descripción de la estructura de un paquete JSON (sus campos, tipos de datos, etc.) es necesaria para que las personas se conecten con sus servicios. Es esencial tener un lenguaje de metadatos para esto. Es por eso que XML tiene Schemas .
Llevar a cabo dos conversaciones simultáneas cliente-servidor se ocupa. Si hace dos preguntas al servidor y recibe una respuesta, ¿cómo sabe qué pregunta responde? Es por eso que XML tiene WS-Correlation .
Reglas rápidas:
- JSON: formato de datos de programa a programa
- YAML (superconjunto JSON): formato de datos humano a programa
- XML: formato de marcado de documento
Explicación:
La única función de JSON es serializar datos orientados a objetos utilizando los tipos de datos comunes a la mayoría de los lenguajes de programación: listas , hashes y escalares , y para ese propósito, realmente no se puede superar o mejorar. A saber "JSON no tiene número de versión [como] no se prevén revisiones a la gramática JSON". - Douglas Crockford (No se puede superar eso como una señal de que haces tu trabajo a la perfección)
XML alguna vez se vendió como un formato de intercambio de datos, pero considere los dos casos de uso más comunes: comunicación asincrónica cliente-servidor (AJAX) : JSON prácticamente ha reemplazado XML por completo (la X debería ser realmente una J) y servicios web : JSON ha convertido XML en una alternativa redundante.
La otra cosa con la que se utilizaba ampliamente XML era con los archivos de datos editables / legibles (?) Para programas, pero también aquí hay un formato más conciso, más amigable para los programas y más amigable para los humanos en YAML, un superconjunto JSON.
Entonces, para la representación de datos, JSON supera a XML en todos los ámbitos. ¿Qué queda para XML entonces? Representación de documentos de contenido mixto, que es para lo que fue diseñada .