Cada día nos toca trabajar mas con objetos Javascript y JSON. Sin embargo en muchas ocasiones la gente me pregunta si se trata de lo mismo o si son cosas diferentes . Vamos a comentar el tema mas a detalle.Lo primero que vamos a hacer es construir un objeto de Javascript denominado “curso”.
var curso= new Object() ; curso.titulo="java"; curso.duracion=20; alert(curso.titulo); alert(curso.duracion);
El objeto por ahora solo dispone de propiedades que serán mostradas por pantalla.
Vamos ahora a añadirle comportamiento.
var curso= new Object() ; curso.titulo="java"; curso.duracion=20; curso.informacion=function() { return "Titulo:" + this.titulo+ ", Duracion:"+ this.duracion; } alert(curso.informacion());
Invocamos el método información y nos mostrará todos los datos por pantalla.
Javascript y sintaxis literal
Como podemos ver hemos añadido la función “informacion” al objeto y hemos usado el operador “this” para acceder a los datos del objeto y mostrarlos por pantalla. Hasta aquí Javascript se parece poco o nada a JSON . Sin embargo este lenguaje de programación soporta otra sintaxis para los objetos que se denomina “sintaxis literal” y nos permite definir el objeto inicial de la siguiente forma.
var curso= {"titulo":"java","duracion":20}; alert(curso.titulo +","+ curso.duracion);
Ahora bien no solo nos permite definir propiedades sino que también nos permite definir funciones .
var curso= {"titulo":"java", "duracion":20, "informacion":function() { return "Titulo:" + this.titulo+ ", Duracion:"+ this.duracion; } }; alert(curso.informacion());
La similitud entre JSON y estos bloques de código es mas que evidente . Ahora bien lo que hemos creado ¿son Objetos? ¿o es una estructura JSON?. El mas sencillo de identificar es el último ejemplo ya que lleva una función y JSON no soporta este tipo de datos. Por lo tanto el último ejemplo es un Objeto de Javascript ahora bien ¿y el otro bloque de código?
var curso= {"titulo":"java","duracion":20};
Validador JSON
Aquí es mas facil tener dudas .Para solventar si el código que esta entre llaves es JSON o no usaremos un validador web.
Copiamos y pegamos nuestro código y comprobamos que estamos ante una estructura JSON válida .Sin embargo que pasaría si modificamos la estructura y eliminamos las “” de titulo y duración.
var curso= {titulo:"java",duracion:20}; alert(curso.titulo +","+ curso.duracion);
El programa seguirá funcionando perfectamente .Sin embargo si pasamos los datos por el validador de JSON nos dirá que la estructura no es válida y ya no se trata de JSON sino que volvemos a estar en sintaxis literal de javascript. Muchas veces los desarrolladores piensan que JSON es un subconjunto de este tipo de sintaxis.
Sin embargo esto no es cierto del todo ya que podriamos tener la siguiente estructura JSON
{"titulo-curso":"java","duracion-curso":20}
Si la pasamos por el validador nos dirá que la estructura es totalmente válida .El problema vendrá de que nuestro programa de Javascript dejará de funcionar. Esto en principio es sorprendente ya que parecía que JSON simplemente era un subconjunto de la sintaxis literal de Javascript . El problema que tenemos es sencillo javascript no soporta variables con guiones (-) y por lo tanto la aplicación deja de funcionar . Así pues aunque Javascript y su sintaxis literal estan muy relacionados con JSON son cosas diferentes uno es un lenguaje de programación y el otro es un formato de transferencia de datos.
En mas de una ocasión nos puede pasar que una estructura JSON no sea válida para Javascript.
Muchas gracias por el post. Repasando, tu último ejemplo significa, como bien decís, que js es un lenguaje de programación y json es un formato de transferencia de datos. Ahora, la consulta es, ese formato de transferencia de datos ¿es DEPENDIENTE de js?. Mi duda surge ya que entiendo que json también puede trabajar con otros lenguajes como Java o php. En donde los objetos json se construirían de la misma forma pero serían accedidos de distinta manera (según el lenguaje).
Muchas gracias. Saludos, Pablo.
Es un standard y todos los lenguajes lo soportan … convertiran la estructura JSON a objetos Java o .NET
Muy bueno los post, he aprendido mucho, esperando los siguientes.
Una consulta, cuando veras sobre framework como PrimeFaces, RichFaces?
Gracias
Saludos
Intentare escribir de JSF despues de navidades 🙂