Gson: Una forma facil de convertir JSON

En el ámbito de los desarrollos en Java pero en especial en Android es casi un estándar trabajar con JSON a la hora de obtener información desde un servidor, donde el principal problema que se nos plantea a la hora de recibir o enviar un JSON es como convertirlo ya sea el contenido del documento a objetos o viceversa.

Si bien es posible hacer la conversión de manera manual, eso nos traería consigo muchas lineas de código y haría que nuestro desarrollo tarde mas tiempo. Ademas esto no nos asegura que la solución que implementemos sea la mas optima en cuanto a temas de performance.

Google escucho todos estos problemas y pensó en crear una librería que los resolviera así fue como nació GSON.

¿Que es?

Gson es una librería open-source la cual nos permite convertir nuestros objetos Java en JSON o viceversa. JSON para los que no sepan es un formato para intercambiar información (al igual que XML) pero se basa en una estructura de pares clave-valor, este formato se ha popularizado debido a que es mas ligero que el XML y es de fácil lectura a la vista de las personas.

Al igual que la mayoría de las librerías existentes tanto a nivel de generación de XML como de JSON, GSON nos provee la posibilidad de cambiar el nombre a nuestros atributos para cuando se genere el documento o cuando a partir de un documento se quieran cargar los objetos Java.

¿Como la agrego a mi proyecto?

Para poder usarla dentro de nuestro proyecto primero deberemos tenerla referenciada dentro de nuestro classpath para ello hay varias alternativas:

  1. Descargar la librería manualmente desde aqui
  2. Referenciarla desde Maven o Gradle

A los fines de este post mostraremos como usarla por medio de Maven por lo cual deberemos agregar dentro de nuestro archivo POM lo siguiente:

Debe tenerse en cuenta que la versión de la librería que actualmente esta vigente puede ser superior a la mencionada en este post por lo cual se debería chequear aqui.

¿Como lo uso?

GSON nos brinda la posibilidad de usarlo sin necesidad de modificar nuestros objetos, agregándole anotaciones, siempre y cuando no sera necesario cambiarle el nombre u obviar algún atributo. Como siempre la mejor forma de ver el funcionamiento de este tipo de librerías que no necesitan una gran explicación es por medio de ejemplos de la conversión de objetos a JSON y viceversa como así también cambiarle el nombre a los atributos u omitir alguno de ellos.

Convertir objetos a JSON

La forma de convertir objetos a un documento JSON es relativamente sencilla, para demostrarlo usaremos la siguiente clase como ejemplo:

Una vez que tengamos una instancia de la clase el código es muy simple y de tan solo unas pocas lineas:

Algo a tener en cuenta es que en el ejemplo la invocación del método toJson no es guardado en ninguna variable, este método lo que retorna es un String en cuyo interior se encuentra un JSON. Pero veamos ahora como quedaría el JSON luego de la invocación:

Renombrar atributos

Ahora supongamos que el nombre que tienen los atributos dentro del JSON no son de nuestro agrado o simplemente otra aplicación que se encargara de consumir un JSON no acepta estos nombres, por esta razón debemos cambiarlos y para ello debemos colocar la anotación @SerializedName (“nombreAtributo”)  solo en los atributos que vamos a cambiarle el nombre.

Veamos como queda nuestra clase Invoice luego de cambiarle el nombre a idInvoice y idClient:

Una vez hecho esto volvamos a ejecutar el código para convertir el objeto y veamos que el JSON que nos retorna (con los atributos con los nuevos nombres) es similar al siguiente:

Convertir JSON a objetos

En el apartado anterior hemos visto como hacer la conversión a un JSON, ahora realizar la operación inversa es bastante sencilla. Para demostrar esto usaremos la clase Invoice que se encuentra en el apartado anterior con las anotaciones ya existentes y pondremos como JSON de entrada algo similar a esto:

Ahora para este ejemplo supondremos que existiría algún método se encargara de obtener el JSON y ponerlo dentro de un String para su posterior conversión. Una vez hecho la lógica necesaria para realizar la operación de conversión es bastante sencilla:

¿Como le cambio el formato a los datos?

Muchas veces nos toca formatear los datos de una determinada manera antes de ser convertidos a JSON o viceversa, por ejemplo el formato de la fecha, la cantidad de decimales que puede tener un Double o Float son algunos casos de esto. Ahora GSON nos provee un mecanismo de realizar esto de forma sencilla y que no implique muchos cambios a nivel de nuestro código, para poder llevar esto a cabo deberemos crear un clase que se encargue ya sea de la serializacion o deserializacion de un objeto en particular (se recomienda crear un solo objeto que haga ambas operaciones)

Veamos un ejemplo de como modificar el formato de nuestro atributo date del formato actual a dd/MM/yyyy, para ello crearemos una clase la cual debe implementar JsonSerializer y  JsonDeserializer para poder realizar ambas operaciones sin la necesidad de crear una clase particular para cada una. Pero veamos como queda el código:

Como puede verse es bastante simple el código y no representa mayores problemas, pero si ejecutaramos el código no pasaría nada y nuestro atributo date saldría con el mismo formato que hasta ahora. Para poder remediar esta situación deberemos registrar esta clase dentro del contexto de GSON, para ello cuando la instanciamos debemos hacerlo por medio del GsonBuilder.

Una vez hecho esto si ejecutamos nuestro código nos retorna un JSON similar a este:

Conclusión

GSON es una librería de fácil utilización y que nos permite crear nuestros documentos JSON a partir de nuestros objetos Java o viceversa de una manera sencilla. Ademas de esto cuenta con la ventaja de poder añadirle serializadores los cuales nos permiten cambiarle el formato a ciertos campos. Por todos estos motivos es que la convierten en una buena opción para los desarrollos en Java pero especialmente para los que son bajo Android.

Al igual que en resto de los post que hemos publicado les dejamos el código fuente para que puedan descargarlo y probarlo, el mismo se encuentra aqui.

You may also like...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *