Entendiendo JSON

Sunday, June 5, 2011 15:38
Posted in category Diseño Web, Programación

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();
You can leave a response, or trackback from your own site.

One Response to “Entendiendo JSON”

  1. Pretty printer de XML en Gedit « Informático de Guardia says:

    November 21st, 2011 at 8:56 am

    […] JSON ha ido adquiriendo adeptos durante todo este tiempo (me cuento entre ellos), sigo utilizando ficheros xml cada vez que puedo […]

Leave a Reply