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

Por clcanela , 23 Abril, 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!

Etiquetas

Comments

Funciona con Drupal