Lectura y escritura de datos en archivo JSON

El origen de la entrada XML para todos era guardar cierta información estructurada. La decisión de utilizar XML era técnica, no era un requisito.
En un momento dado puedo necesitar guardar o recuperar cierta información desde el sistema de archivos y puede ser que tenga libertad para elegir el formato. Puedo considerar  interesante el poder editar dichos archivos para hacer pequeñas modificaciones y podré seleccionar el idóneo.
Una alternativa viable y estándar puede ser guardar un archivo CSV o un archivo XML o, en el caso que nos ocupa, un archivo JSON.
Para guardar archivos json conteniendo información estructurada utilizaré las librerías de google GSON, Con unos requisitos tan relajados son la opción idónea por la simplicidad de uso.
El destino es almacenar un montón de objetos javabean, creados de forma "foo" y recuperarlos posteriormente.
Los objetos serán :

El código es bastante conciso: (he eliminado bastantes import triviales)

En la primera parte poblamos una List con objetos de tipo usuario y metemos valores "foo".
En la linea 19 creamos un objeto Gson, en la 20 definimos un Writer de la maquina virtual de java que me permita volcarlo a un archivo, escribimos en dicho archivo y lo cerramos. Cuatro lineas!!!

El resultado es un json, formateado pues he utilizado el GsonBuilder, indicando que sea prettyprinter.
Archivo json:

Para comprobar que todo ha ido bien vamos a recuperar el mismo archivo y leerlo.

En la misma linea de la operación anterior utilizamos un Reader de la JVM. Aquí tenemos que indicarle que lo que va a leer es un array ( una colección de objetos) y le indicamos qué tipo de objetos, Linea 26.
En la linea 28 leemos desde el reader y en la 29 mostramos en consola los elementos del archivo. En otras cuatro linea de código. Además de los import de la maquina virtual de java los de Gson son:
  • import com.google.gson.Gson;
  • import com.google.gson.GsonBuilder;
  • import com.google.gson.reflect.TypeToken;
 He utilizado el GsonBuilder pero podría prescindir de él si no quisiese tener unos json identados, perdiendo legibilidad.

Sobre esta versión he realizado una iteración más que empaqueta el json en un archivo Zip y recupera el json del mismo archivo , lo añado como curiosidad, sin explicación alguna: Esta versión contiene todos los import, por si hay alguna duda de los utilizados antes:



La versión utilizada de las GSON es 2.2.4. (gson)
Sólo comentar que la diferencia entre guardarlo en un json o un json dentro de un zip son 3 lineas más y la lectura desde un json empaquetado son unas 8 lineas, aparte de que pueda existir un método más óptimo para procesar archivos zip.

Consideraciones finales. Cuando traté el tema de los XML mostraba un planteamiento un escenario más o menos real. En otra situación podemos necesitar utilizar otras librerias y recorrer el dom, y los nodos y ese tipo de cosas tan divertidas. De igual manera al hablar de json podemos pensar en soluciones más potentes, usando por ejemplo las librerías Jackson. Pero tengo un cariño alto ha utilizar lo que entiendo es la solución más simple que resuelve completamente el problema.

En mi caso he utilizado JVM 1.8, sobre un eclipse neon y creo que cualquier código o librerías corren sin problemas sobre la 1.6 (También he utilizado maven, pero es por pura costumbre. :-) )




Comentarios