Entendiendo JSON
JSON (JavaScript Object Notation) es un formato para el intercambio de datos de forma ligera, organizada, de fácil acceso y “comprensión” por parte de los humanos y las máquinas.
Un ejemplo de notación en JSON podría ser la definición de una persona:
var una_persona = { "ciudad" : "Madrid", "nombre" : "Oscar", "edad" : "27" }; |
Si desde nuestro código JavaScript quisieramos acceder a los atributos del objeto “una_persona” podríamos hacerlo de la siguiente manera:
var edad = una_persona.edad; var nombre = una_persona.nombre; var ciudad = una_persona.ciudad; alert(nombre + " vive en " + ciudad + " y tiene "+ edad + " años"); |
¿Por qué JSON si el estandar más utilizado para el intercambio de información es XML?. JSON tiene algunas ventajas sobre XML.
La primera es que los datos en JSON ocupan mucho menos que en XML (aunque no siempre), y por lo tanto los datos a serializar serán mucho menores.
Nuestro ejemplo anterior se podría haber definido de la siguiente forma en XML:
<persona> <ciudad>Madrid</ciudad> <nombre>Oscar</nombre> <edad>29</edad> </persona> |
Como podemos observar los datos que conforman el objeto persona en JSON ocupan menos que en el estandar XML.
Otra ventaja interesante a la hora de trabajar con JSON como sistema de almacenamiento de datos, es la integración con AJAX. El problema principal en AJAX consiste en mover datos entre el servidor y el cliente; problema que se suele resolver utilizando XML, pero la solución suele ser bastante tediosa. A la hora de intercambiar datos podremos utilizar cadenas de información definidas mediante JSON y evaluarlas para obtener objetos JavaScript válidos:
var searchReq = getXmlHttpRequestObject(); if (searchReq.readyState == 4) { var respuesta_texto_JSON = searchReq.responseText ; var una_persona = eval("(" + respuesta_texto_JSON + ")"); } |
Ahora y simplemente llamando a la función eval, ya tenemos un objeto JavaScript valido, por lo que ya podemos acceder a sus atributos:
alert("Hola mundo, me llamo " + una_persona.nombre); |
Uno de los problemas que nos encontramos a la hora de utilizar JSON tiene que ver con la evaluación de código y con la seguridad. La función eval acepta cualquier cádena valida que contenga JavaScript lo que puede causarnos algún tipo de problema de seguridad además de no ser la opción más óptima para la evaluación y transformación de cadenas de texto en formato JSON. Es por ello que existen algunos parsers que incrementan considerablemente el proceso de evaluación:
// Utilizando la función Eval var una_persona = eval('(' + textoJSON + ')'); // Utilizando JSON Nativo var una_persona = JSON.parse(textoJSON); // Ambas técnicas var una_persona = (JSON)?JSON.parse(textoJSON): eval('(' + textoJSON + ')'); |
Si quisieramos recostruir la represetación textual del objeto JSON simplemente tendriamos que utilizar el siguiente método:
var representacion_persona_texto = una_persona.toJSONString(); |
2 Responses
[…] JSON ha ido adquiriendo adeptos durante todo este tiempo (me cuento entre ellos), sigo utilizando ficheros xml cada vez que puedo […]