javascript - mostrar - ¿Por qué es importante JSON?
mostrar datos json javascript (10)
Solo he escuchado recientemente acerca de JSON (Notación de objetos de Javascript). ¿Alguien puede explicar por qué es importante (según algunos sitios web / blogs / etc) ser importante? Ya tenemos XML, ¿por qué JSON es mejor (además de ser ''nativo de Javascript'')?
Edit: Hmm, el tema de respuesta principal parece ser ''es más pequeño''. Sin embargo, el hecho de que permita la obtención de datos a través de dominios, me parece importante. ¿O esto en la práctica no es (todavía) muy usado?
¡No es que sea mejor, sino que puede unir muchas cosas para permitir una transferencia de datos sin interrupciones sin un análisis manual!
Por ejemplo javascript -> servicio web C # -> javascript
Depende de lo que vayas a hacer. Aquí hay muchas respuestas que prefieren JSON sobre XML. Si miras más profundamente no hay una gran diferencia.
Si tienes un árbol de objetos, solo obtienes el árbol de objetos de javascript. Si echas un vistazo a la tensión para usar el acceso al estilo de POO, entonces te revuelves. Supongamos que tiene un objeto de tipo A, B, C que se construye en un árbol. Puede habilitarlos fácilmente para ser serializados a JSON. Si los lees de vuelta solo obtienes un árbol de objetos javascript. Para reconstruir tu A, B, C, debes rellenar los valores manualmente en objetos creados manualmente o hacer algunos cortes. ¿Suena como analizar XML y crear objetos? Bueno, sí :)
En estos días solo los navegadores más nuevos vienen con soporte nativo para JSON. Para admitir más navegadores, tiene dos opciones: a) carga un parasol json en javascript que le ayuda a analizar. Entonces, ¿qué tan gordo suena esto con respecto a la fatreeness? La otra opción que veo a menudo es eval. Solo puedes hacer eval () en una cadena JSON para obtener los objetos. Pero eso introduce un nuevo conjunto de problemas de seguridad. JSON se especifica por lo que no puede contener funciones. Si no está verificando la función de los objetos, alguien puede enviarle fácilmente el código que se está ejecutando.
Así que puede depender de lo que más te guste: JSON o XML. La mayor diferencia es probablemente la forma de acceder a las cosas, ya sean etiquetas de script XMLHTTPRequest ... Decidiría sobre esto qué usar. En mi opinión, si hubiera un soporte adecuado para XPATH en los navegadores, a menudo decidiría usar XML. Pero la moda está dirigida hacia json y cargar parsers json adicionales en javascript.
Si no puede decidir y sabe que necesita algo realmente poderoso, debe echar un vistazo a YAML. Leer sobre YAML es muy interesante para obtener más información sobre el tema. Pero realmente depende de lo que estás tratando de hacer.
Estas páginas web pueden ayudar:
JSON entró en uso popular principalmente porque ofrece una forma de eludir la política del mismo origen utilizada en los navegadores web y, por lo tanto, permitir mashups.
Digamos que está escribiendo un servicio web en el dominio A. No puede cargar datos XML desde el dominio B y analizarlos porque la única forma de hacerlo sería XMLHttpRequest, y XMLHttpRequest estuvo originalmente limitada por la política del mismo origen a hablar solo a las URL en el mismo dominio que la página que contiene.
Resulta que, por diversos motivos, se le permite solicitar etiquetas <script> en todos los orígenes. Las personas inteligentes se dieron cuenta de que esta era una buena manera de evitar la limitación con XMLHttpRequest. En lugar de que el servidor devuelva XML, puede devolver una serie de objetos JavaScript y literales de matriz.
(la pregunta adicional queda como un ejercicio para el lector: ¿por qué se permite <script src = "..."> en dominios sin suscripción automática al servidor, pero XHR no lo está?)
Por supuesto, devolver un <script> que no consiste más que en literales de objetos no es útil porque sin asignar los valores a alguna variable, no se puede hacer nada con ella. Por lo tanto, la mayoría de los servicios utilizan una variante de JSON, llamada JSONP ( http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/ ).
Con el aumento de la popularidad de los mashups, las personas se dieron cuenta de que JSON era un formato de intercambio de datos conveniente en general, especialmente cuando JavaScript es uno de los extremos del canal. Por ejemplo, JSON se usa ampliamente en Chromium, incluso en los casos en que C ++ está en ambos lados. Es solo una buena forma liviana de representar datos simples, que existen buenos analizadores en muchos idiomas.
Curiosamente, el uso de etiquetas <script> para hacer mashups es increíblemente inseguro porque esencialmente es XSS''intense a propósito. Por lo tanto, se tuvo que introducir JSON nativo ( http://ejohn.org/blog/native-json-support-is-required/ ), lo que elimina los beneficios originales del formato. Pero para entonces, ya era súper popular :)
JSON es generalmente mucho más pequeño que su equivalente XML. Una transferencia más pequeña significa una transferencia más rápida, lo que se traduce en una mejor experiencia para el usuario.
JSON es mucho más conciso. XML:
<person>
<name>John Doe</name>
<tags>
<tag>friend</tag>
<tag>male</tag>
</tags>
</person>
JSON:
{"name": "John Doe", "tags": ["friend", "male"]}
También hay menos funciones superpuestas. Por ejemplo, en XML hay tensión entre la elección de usar elementos (como anteriormente), frente a los atributos ( <person name="John Doe">
).
JSON es un formato de serialización de objetos basado en texto que es más ligero que XML y que se integra directamente con el modelo de objetos de JavaScript. Esa es la mayoría de sus ventajas allí mismo.
Sus desventajas (en comparación con XML) son, aproximadamente: menos herramientas disponibles (olvídese de la validación y / o transformación estándar, por no mencionar el resaltado de sintaxis o la verificación de la buena forma en la mayoría de los editores), y es menos probable que sean legibles para los humanos (hay muchos Las variaciones en la legibilidad de JSON y XML, por lo que es una declaración necesariamente difusa), la estrecha integración con JavaScript hace que la integración no sea tan estrecha con otros entornos.
Si está trabajando en Javascript, es mucho más fácil para nosotros JSON. Esto se debe a que JSON se puede evaluar directamente en un objeto de Javascript, que es mucho más fácil de trabajar que el DOM.
Tomar prestado y alterar ligeramente el XML y JSON desde arriba
XML:
<person>
<name>John Doe</name>
<tag>friend</tag>
<tag>male</tag>
</person>
JSON:
{ person: {"name": "John Doe", "tag": ["friend", "male"]} }
Si quisiera obtener el segundo objeto de etiqueta con XML, necesitaría usar las apis DOM potentes pero detalladas:
var tag2=xmlObj.getElementsByTagName("person")[0].getElementsByTagName("tag")[1];
Mientras que con un objeto Javascript que llegó a través de JSON, simplemente puedes usar:
var tag2=jsonObj.person.tag[1];
Por supuesto, Jquery hace que el ejemplo DOM sea mucho más simple:
var tag2=$("person tag",xmlObj).get(1);
Sin embargo, JSON simplemente "encaja" en un mundo de Javascript. Si trabaja con él durante un tiempo, descubrirá que tiene una sobrecarga mental mucho menor que la de los datos basados en XML.
Todos los ejemplos anteriores ignoran la posibilidad de que uno o más nodos estén disponibles, duplicados o la posibilidad de que el nodo tenga solo uno o ningún elemento secundario. Sin embargo, para ilustrar la natividad de JSON, para hacer esto con el jsonObj, solo tienes que:
var tag2=(jsonObj.person && jsonObj.person.tags && jsonObj.person.tags.sort && jsonObj.person.tags.length==2 ? jsonObj.person.tags[1] : null);
(A algunas personas les puede no gustar tanto tiempo ternario, pero funciona). Pero XML sería (en mi opinión) más desagradable (no creo que quieras aplicar el enfoque ternario porque seguirías llamando a los métodos dom que pueden tener que hacer el trabajo de nuevo dependiendo de la implementación):
var tag2=null;
var persons=xmlObj.getElementsByTagName("person");
if(persons.length==1) {
var tags=persons[0].getElementsByTagName("tag");
if(tags.length==2) { tag2=tags[1]; }
}
Jquery (sin probar):
var tag2=$("person:only-child tag:nth-child(1)",xmlObj).get(0);
XML tiene varios inconvenientes:
- ¡Es pesado!
- Proporciona una representación jerárquica de contenido que no es exactamente igual a (pero muy similar a) el modelo de objetos de Javascript.
- Javascript está disponible en todas partes. Sin ningún analizador externo, puede procesar JSON directamente con el intérprete JS.
Claramente no está destinado a reemplazar XML por completo. Para aplicaciones web basadas en JS, sus ventajas pueden ser útiles.
JSON es una forma de serializar datos en objetos Javascript. La sintaxis se toma del lenguaje, por lo que debe ser familiar para el desarrollador que trabaja con Javascript y, al ser la clasificación de un objeto, es un método de serialización más natural para la interacción dentro del navegador que un derivado XML completo. (Con todas las decisiones de diseño arbitrarias que ello implique).
Es ligero e intuitivo.