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

By clcanela, 23 April, 2013
Palabra JSON entre corchetes

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!

Andres (not verified)

9 years 7 months ago

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

el otro fulano (not verified)

9 years 3 months ago

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

sr lol (not verified)

8 years 10 months ago

lol

Miguel Carales (not verified)

8 years 9 months ago

Muy bueno y claro, Muchas Gracias, feliciataciones

VlpRena (not verified)

8 years 8 months ago

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

Diego (not verified)

8 years 3 months ago

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

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!

Anonimo (not verified)

5 years 8 months ago

Perfecto

crstian (not verified)

5 years 7 months ago

Excelente !!!!

crstian (not verified)

5 years 7 months ago

Excelente !!!!

lucas adams (not verified)

5 years 5 months ago

pregunto, lo que viaja hacia el servidor es texto o binario encriptado ? que tan seguro es ?

Es texto plano, como tal desconozco si hay forma de encriptar la información que viaja entre cliente-servidor, además de un cifrado SSL o enviar la información cifrada de origen. A lo que voy es que nativamente javascript no tiene ninguna funcionalidad para (des)encriptar la información en JSON

hola clcanela, pregunta ya que veo que sabes bastante del tema, que es mejor para aplicaciones web, json o PDO para insertar o actualizar el la base de datos, gracias

Qué tal Nestor, creo que hay una pequeña confusión, JSON y PDO tienen dos fines distintos: JSON es una notación para compartir información, una representación de datos si lo quieres poner de esa forma, mientras que PDO es un conjunto de librerías para manejo de base de datos que permite homologar algunas llamadas en PHP a distintos drivers/engines de bases de datos. Teniendo eso como base, una aplicación puede manejar su comunicación interna (entre clases, endpoints, instancias, etc.) completamente vía JSON y usar PDO en php para leer y almacenar dichas cadenas JSON, ya que al ser texto plano, es posible guardar objetos complejos en base de datos. No se si con eso aclaro tu duda, realmente son cosas independientes la una de la otra

gracias por responder mi duda clcanela, no se si me puedas orientar en esto de librerias y sistemas web, ya que no se mucho y tengo algunas dudas, gracias.

gracias, he visto ejemplos de que en la misma pagina de editar o agregar se pone el código en php de actualizar y en otras paginas código json, donde se tiene otros archivos independientes y hacen los llamados

o te puedo mandar los archivos para que me entiendas lo que trato de decir.

un futuro prog… (not verified)

5 years 1 month ago

bastante claro,me fue bastante útil.

rodolfo (not verified)

4 years 10 months ago

alert("hola")

Jose Francisco… (not verified)

4 years 2 months ago

Saludos, muchas gracias por tu articulo, realmente tu forma de exponerlo es muy sencilla para entenderlo, y eso dice de tu experiencia para enseñar, que es un don que no todos tenemos.

Lorena (not verified)

3 years 11 months ago

Excelente información, gracias por compartir.

Comments

Powered by Drupal