Cada día nos suena más familiar este término, se usa en todo tipo de conversaciones informáticas, sobre todo las que están relacionadas con las también muy populares API's, y es que JSON y las Application Programing Interface se integran muy bien, y en este artículo descubriremos el porqué.
¿Qué es JSON?
Lo primero, y más importante, es dejar claro que JSON es un formato de texto. Por lo que de esto podemos sacar un par de poderosas conclusiones. Primero, no tiene ninguna dependencia con JavaScript, ni en su implementación, ni en su uso, al ser un formato de texto puede ser capturado y procesado por cualquier lenguaje de programación, incluso la totalidad de los lenguajes de programación más usados incorporan librerías para el procesamiento de estos archivos. Me parece importante de entrada hacer esta separación entre JSON y JavaScript, ya que su nombre puede ser engañoso en este sentido. Repito, más allá del nombre y un poco de su sintaxis, no tienen ninguna otra relación. La segunda conclusión es respecto a las características que le otorga ser un archivo o un trozo de texto: por un lado poco peso, JSON es tremendamente liviano, siendo muy valioso esto para grandes volúmenes de datos; y por otro lado su facilidad a la hora de ser intercambiado entre sistemas, pues no debe adaptarse al lenguaje que va a trabajar con él, y el resultado de todos estos lenguajes o sistemas será el mismo, característica imprescindible de los formatos de intercambios de texto, como XML.
En resumen: JSON es un formato liviano para el intercambio de datos entre sistemas.
En resumen: JSON es un formato liviano para el intercambio de datos entre sistemas.
¿Cómo se estructura un archivo JSON?
La extensión de estos archivos es .json, y pueden ser leídos y modificados en cualquier programa de edición de texto: desde el Visual Studio Code hasta el bloc de notas de toda la vida.
La imagen superior muestra de una manera gráfica muy sencilla la estructura de un objeto en JavaScript. Pero ¿no habíamos quedado en que JSON no tenía que ver con JavaScript? No del todo. Pues de su nombre inferimos que alguna relación sí tiene, ¿no? no fue capricho llamarlo así. La claridad que hicimos con respecto a estos dos términos es que el uno no dependía del otro, que los dos se pueden trabajar por separado. Pero lo que hereda JSON del lenguaje de programación es su sintaxis, la forma de escribirse, o la forma como en JavaScript se define un objeto:
![]() |
Tomado de https://www.json.org |
var object = {
nombre: "Juan", apellido: "Ardila", nombreCompleto: function () { return this.nombre + " " + this.apellido; }, edad: 22, casado: false, fechaNacimiento: new Date(1997, 06, 29) };
Ahora veamos un ejemplo de un conjunto de datos en JSON para compararlos:
'{ "nombre": "Juan",
"apellido": "Ardila",
"edad": 22,
"casado": false,
"fechaNacimiento": "1997-07-29T00:00:00.000Z" }'
Vamos punto por punto analizando similitudes y diferencias.
Lo primero que vemos es que nuestro bloque JSON está encerrado en unas comillas simples (' '), y es lo que hemos venido diciendo todo el artículo: ¡JSON es un formato de texto! por lo que tiene todo el sentido que en nuestros lenguajes de programación esté representado por un string, que no son otra cosa que pedazos de texto que usamos en el programa.
Lo segundo, es una similitud. La estructura de ambos está definida por un conjunto de atributos representados por pares (clave:valor), éstos a su vez están separados por comas (,) y el conjunto de todo esto está encerrado entre llaves, que definen nuestro bloque. Esta característica es la que une ambos mundos, su principal y se podŕia decir único punto de convergencia.
Lo tercero, si seguimos mirando al uno y al otro, está en como se definen los pares clave-valor: en JavaScript, le damos un nombre a nuestro atributo(clave) y le asignamos un valor que puede ser de cualquiera de los tipos que nos define JavaScript, incluyendo tipos no primitivos, como Date() o unos que definamos nosotros, incluso aún, nos permite asignar como valor una función. Por otro lado, en JSON, al definir el nombre de nuestro atributo, éste debe ir entre comillas (" "), como si de un string se tratara, y los tipos de valores que podemos definir está más restringidos, pero son suficientes para definir de manera correcta nuestros datos, si sabemos cómo usarlos. Los tipos que admite el formato JSON son:
- Number
- String
- Boolean
- Array
- Object
- null
JSON no permite el uso de funciones, y ésto es algo que puede ser obvio, si no olvidamos su propósito: JSON es usado para intercambiar información, simple y llanamente. El programa que reciba ésta información ya podrá aplicar la parte lógica y manipular ésta información de manera conveniente.
JSON tampoco permite el uso de otro tipo de datos diferentes a los listados, así éstos ya estén definidos en el lenguaje destino, ésto favorece el intercambio, y la estandarización, ya que los tipos de datos mencionados arriba están definidos en todos los lenguajes. Cabe aclara que cuando nos referimos al tipo de dato Object, éste hace referencia a un objeto definido como JSON, con las mismas reglas y los mismo tipos de datos aceptados, básicamente es anidar, con la estructura que tenemos definida con los JavaScript Object Notation.
Por último, una particularidad que puede destacar en nuestro ejemplo es el caso de las fechas, vemos como JSON almacena un string que (suponemos) representa nuestra fecha, y es que como Date no es un tipo aceptado por éste formato, debemos convertir nuestra fecha a formato texto, y almacenarla de esta forma. En JavaScript existe una función que nos convierte de un tipo a otro con un formato universal (ISO 8601) para poder convertirlo apropiadamente en cualquier otro lenguaje.
let date = new Date();
let stringDate = date.toJSON();
let recoveredDate = new Date(stringDate);
Reglas de oro para definir un archivo JSON
Siguiendo esta guía, hecha a modo de resumen, vamos a asegurar que los archivos JSON que escribimos cumplen lo que define el formato, y que no habrá inconvenientes a la hora de usarlo en nuestro progrmas o aplicaciones:
- Los datos en JSON están escritos dentro de llaves ( { } )
- Los datos están representados como pares clave-valor
- Las claves deben estar encerradas entre comillas ( " " )
- Las claves y los valores deben estar separados por 'dos puntos' ( : )
- Para separar los datos se usa coma ( , )
- Los arrays van entre corchetes ( [ ] )
- Los objetos van entre llaves ( { } )
Con estas siete sencillas claves vamos a asegurar que nuestros archivos JSON tienen la estructura correcta y nos ahorraremos más de un dolor de cabeza que suele ocurrir cuando olvidamos alguna.
De JavaScript a JSON, y viceversa
Por último, los dejo con un par de funciones que nos permitiran trabajar con JSON en nuestras aplicaciones JavaScript, estos métodos tienen sus equivalentes en todos lo otros lenguajes de programación.
Al ser JSON un trozo de texto, debemos convertirlo en algo con lo que poder trabajar, y hay una sencilla función que hace el trabajo sucio por nosotros, que recibe un string con nuestros datos JSON y nos devuelve un objeto JavaScript, con el que podemos trabajar como con cualquier otro objeto de lenguaje:
var jsObject = JSON.parse(jsonString);
jsonString, es la variable donde tenemos almacenado nuestro string con formato JSON, que capturamos de una API o que construimos de otra forma. Con esta sencilla linea de código obtemos a partir de nuestro string un objeto para usar a lo largo de nustro programa, podemos iterar sobre él, eliminar atributos, etc..., tal como lo haríamos con cualquier otro objeto.
La función inversa, que nos permite transformar un objeto en un string válido con formato JSON. Las funciones definidas en el objeto no se incluyen, y los tipos no aceptados por JSON se pasan a su respectiva representación en string.
var jsonString = JSON.stringify(jsObject);
Hasta aquí este post, donde nos adentramos en el formato de intercambio de datos JSON y la manera de escribir éste correctamente, analizamos sus detalles y cómo nos beneficia en nuestros proyectos. No olvides dejar tus comentarios si alguna parte no es del todo clara, si crees que se deba profundizar más en algún punto, o simplemente con un agradecimiento si la información que encontraste acá te sirvió. Hasta una próxima ocasión.
No hay comentarios:
Publicar un comentario