23 Abril 2013 clcanela
25951 16

¿Qué es JSON, para qué sirve y dónde se usa?


25951 16

Hace algún tiempo planeando un proyecto en conjunto con otra desarrolladora surgió el tema de JSON, en ése entonces no lo conocía, así que me dí a la tarea de investigarlo para poder utilizarlo en el proyecto. Aquí lo que aprendí e investigué sobre qué es JSON y con qué se come.

JSON es el acrónimo para JavaScript Object Notation, y aunque su nombre lo diga, no es necesariamente parte de JavaScript, de hecho es un estándar basado en texto plano para el intercambio de información, por lo que se usa en muchos sistemas que requieren mostrar o enviar información para ser interpretada por otros sistemas, la ventaja de JSON al ser un formato que es independiente de cualquier lenguaje de programación, es que los servicios que comparten información por éste método, no necesitan hablar el mismo idioma, es decir, el emisor puede ser Java y el receptor PHP, cada lenguaje tiene su propia librería para codificar y decodificar cadenas de JSON.

¿Cómo se forma una cadena de JSON?

El principio básico es con pares atributo-valor, éstos deben estar encerrados entre llaves } que es lo que definen el inicio y el fin del objeto.

Para entender ésto de mejor forma, vamos a formar un objeto JSON para los datos de una persona:

//Ejemplo de JSON para un objeto tipo Persona
{
"nombre":"Fulano Probencio",
"edad":27,
"nacionalidad":"Chileno",
"altura":"172 cm",
"peso":75
}

En el ejemplo formamos un objeto JSON para una persona con sus datos básicos, como son su nombre, edad, nacionalidad, etc. Algo que podrán notar de entrada es que todos los atributos y valores se encierran entre comillas, esto es importante ya que parte del estándar de JSON establece que un atributo debe delimitarse por comillas, lo mismo aplica para sus valores, pero no para todos, pues como notarán, los números pueden no tener comillas, ya que son en sí un valor primitivo aceptado en la mayoría de los lenguajes que interpretan JSON. Lo anterior aplica tanto a números enteros, como decimales, positivos y negativos, buleanos y hasta arreglos y otros objetos. Aunque yo en lo personal cuando debo armar un objeto json, a los valores numéricos acostumbro encerrarlos entre comillas, finalmente la gran mayoría de decodificadores nos respetan el valor como numérico.

Como verán, hasta ahora un objeto JSON no es gran complicación, pero ahora pasaremos a esa parte ya que como mencioné anteriormente, un valor que puede almacenar JSON son arreglos e incluso otros objetos, comencemos primero con un ejemplo de un arreglo, continuemos con el objeto anterior de persona, agreguémosle ahora el atributo pasatiempos, el cual será un listado de hobbies que tiene nuestro amigo Fulano.

{
"nombre":"Fulano Probencio",
"edad":27,
"nacionalidad":"Chileno",
"altura":"172 cm",
"peso":75,
"pasatiempos":["Polo","Cricket","Ski","Drafting","Gaming"]
}

El nuevo atributo pasatiempos tiene como valor un arreglo, pare definir un arreglo, debemos enlistar sus elementos separados por coma y encerrados entre corchetes [], de esta forma creamos un arreglo en JSON, sus valores pueden ser cualquier valor aceptado en JSON y en el lenguaje emisor/receptor (numéricos, textos, buleanos, incluso otros arreglos y otros objetos).

Finalmente, para demostrar otros dos posibles valores aceptados en el formato JSON, vamos a otrogarle a nuestro excéntrico amigo Fulano dos nuevos atributos, uno que sea su dirección, el cual será un objeto con calle, numero y país, y el atributo soltero, que será un buleano para indicar si es casado o no.

{
"nombre":"Fulano Probencio",
"edad":27,
"nacionalidad":"Chileno",
"altura":"172 cm",
"peso":75,
"pasatiempos":["Polo","Cricket","Ski","Drafting","Gaming"],
"soltero":true,
"direccion":{
    "calle":"Ave. Siempre Viva",
    "numero":"123",
    "pais":"México"
    }
}

Con éstos principios podemos comenzar a crear nuestras cadenas de JSON, aunque básicas, ya podríamos interpretarlas y armarlas con cierta facilidad. Algunos editores de código como NetBeans, Dreamweaver, Textpad, etc. tienen incorporados plugins (o se les puede descargar) que nos ayudan a dar formato y validar nuestros objetos JSON, aunque si tienen prisa o no cuentan con ése tipo de herramientas pueden optar por soluciones en línea como JSONLint, un validador de JSON en línea que nos da formato y valida los objetos que ingresemos en su área de texto.

Por último una nota, cuando se manda o recibe un objeto JSON, siempre se maneja un sólo objeto a la vez, es decir, no podemos manejar más de un objeto pegado con otro aunque los separemos por comas, pero sí es posible enviar/recibir un gran objeto JSON que tenga un valor con muchos objetos en su interior, por ejemplo si quisiera enviar varios objetos persona de una sola vez, haría lo siguiente:

{
    "personas": [
        {
            "nombre": "Fulano Probencio",
            "edad": 27,
            "nacionalidad": "Chileno",
            "altura": "172 cm",
            "peso": 75,
            "pasatiempos": [
                "Polo",
                "Cricket",
                "Ski",
                "Drafting",
                "Gaming"
            ],
            "soltero": true,
            "direccion": {
                "calle": "Ave. Siempre Viva",
                "numero": "123",
                "pais": "México"
            }
        },
        {
            "nombre": "Otro Fulano",
            "edad": 22,
            "nacionalidad": "Argentino",
            "altura": "178 cm",
            "peso": 72,
            "pasatiempos": [
                "Pintar",
                "Programar",
                "Scuba Diving"
            ],
            "soltero": true,
            "direccion": {
                "calle": "Ave. Siempre Viva",
                "numero": "123",
                "pais": "México"
            }
        },
        {
            "nombre": "Amiga Fulana",
            "edad": 25,
            "nacionalidad": "Cubana",
            "altura": "167 cm",
            "peso": 55,
            "pasatiempos": [
                "Natación",
                "Alpinismo",
                "Cinéfila",
                "Socializar",
                "Gaming"
            ],
            "soltero": true,
            "direccion": {
                "calle": "Cerro del Estudiante",
                "numero": "456",
                "pais": "Argentina"
            }
        }
    ]
}

Por ahora es todo, recuerden que cualquier duda, comentario o reclamación, pueden usar la zona de comentarios.

Felices sentencias!

Quizá te interesen
Tutorial: Cómo leer un JSON con jQuery
Cómo probar peticiones y servicios en línea
Recibirás notificaciones de las respuestas a tu comentario y obtendrémos tu avatar de Gravatar.com Tu correo no será publicado

JOSE12 Febrero 2014

mmmm interesante

Recibirás notificaciones de las respuestas a tu comentario y obtendrémos tu avatar de Gravatar.com Tu correo no será publicado

martin26 Mayo 2014

excelente aporte. gracias.

Recibirás notificaciones de las respuestas a tu comentario y obtendrémos tu avatar de Gravatar.com Tu correo no será publicado

Viviana29 Mayo 2014

Excelente! Gracias! Muy buena la intro!

Recibirás notificaciones de las respuestas a tu comentario y obtendrémos tu avatar de Gravatar.com Tu correo no será publicado

Andres5 Junio 2014

Muchas gracias, Una explicación muy clara y sencilla.

Recibirás notificaciones de las respuestas a tu comentario y obtendrémos tu avatar de Gravatar.com Tu correo no será publicado

Fac12 Septiembre 2014

Bastante claro... gracias por el aporte...

Recibirás notificaciones de las respuestas a tu comentario y obtendrémos tu avatar de Gravatar.com Tu correo no será publicado

el otro fulano29 Septiembre 2014

Excelente aporte. muchas gracias por la explicacion clara y resumida.

Recibirás notificaciones de las respuestas a tu comentario y obtendrémos tu avatar de Gravatar.com Tu correo no será publicado

Jesus Calderon6 Noviembre 2014

Excelente tuto Gracias!

Recibirás notificaciones de las respuestas a tu comentario y obtendrémos tu avatar de Gravatar.com Tu correo no será publicado

Claudia22 Febrero 2015

Me gusto, y te entendí a la perfeccion, sigue asi amigo

Recibirás notificaciones de las respuestas a tu comentario y obtendrémos tu avatar de Gravatar.com Tu correo no será publicado

el peluca|24 Febrero 2015

el ventilador sabe

Recibirás notificaciones de las respuestas a tu comentario y obtendrémos tu avatar de Gravatar.com Tu correo no será publicado

sr lol19 Marzo 2015

lol

Recibirás notificaciones de las respuestas a tu comentario y obtendrémos tu avatar de Gravatar.com Tu correo no será publicado

flabio9 Abril 2015

impecable, muy claro . muchas gracias !!

Recibirás notificaciones de las respuestas a tu comentario y obtendrémos tu avatar de Gravatar.com Tu correo no será publicado

Miguel Carales18 Abril 2015

Muy bueno y claro, Muchas Gracias, feliciataciones

Recibirás notificaciones de las respuestas a tu comentario y obtendrémos tu avatar de Gravatar.com Tu correo no será publicado

Beto Cruz27 Abril 2015

Gracias, muy clara la explicacion.

Recibirás notificaciones de las respuestas a tu comentario y obtendrémos tu avatar de Gravatar.com Tu correo no será publicado

VlpRena5 Mayo 2015

Este post me sirvio mucho para conocer mas acerca de la sintaxis de json...muchas gracias

Recibirás notificaciones de las respuestas a tu comentario y obtendrémos tu avatar de Gravatar.com Tu correo no será publicado

Diego23 Septiembre 2015

Como puedo hacer el mismo ejercicio que publicaste pero que los valores donde dicen fulano, chileno, 172cm, etc... lo saque de una base de datos y lo rellene de forma automatica mientras llena la base datos se agrega el valor ej. sexo:masculino .. y eso que se agregue a lo que ya se tiene.. xfa espero su respuesta o si pueden me lo publican a mi correo: tu_gatito_18@hotmail.com

Recibirás notificaciones de las respuestas a tu comentario y obtendrémos tu avatar de Gravatar.com Tu correo no será publicado

clcanela23 Septiembre 2015

Qué tal Diego, creo que lo que preguntas es cómo formar un JSON de ciertos datos de una BD. Ésto no es tan complicado pero no creo que el espacio de los comentarios sea lo ideal, me has dado una idea para un tutorial ¡gracias!
Bueno, intentando ayudarte:
1- Si estás usando PHP y MySQL puedes obtener toda la información que quieres con un SELECT de MySQL, si estás familiarizado con PDO puedes usar su opción de fetchObject() (Más info en: PHP.net)
2- Te recomiendo tener un array() donde vayas almacenando cada objeto devuelto por la base de datos (siguiendo el ejemplo del artículo, cada row devuelto sería una persona)
3- Agregar los headers de PHP para decirle que la salida de nuestro script es tipo JSON:
header('Content-type: application/json');
4- Mandar a imprimir tu arreglo completo con la función de json_encode:
print json_encode($nombreDeTuArreglo)

Con eso puedes obtener siempre un JSON que tenga la información mas reciente ingresada en tu BD. Recuerda que no debes imprimir ninguna otra cosa con éste script de PHP, de lo contrario obtendrías un JSON no válido.

Espero haberte apoyado!

Recibirás notificaciones de las respuestas a tu comentario y obtendrémos tu avatar de Gravatar.com Tu correo no será publicado