Social

sábado, 27 de abril de 2013

Java: Leer/Escribir Json con Gson

Gson es un parser que nos permite leer cadenas obtenidas de archivos Json hecho para Java que fue realizado por Google. A diferencia de otros parsers detecta la estructura del .json y nos permite asignarle estos valores aun Objeto definido por nosotros si las estructuras coinciden, en otras palabras nos permiten parsear objetos json a objetos java.

Se puede descargar la librería Gson de code.google.com o directamente de este link <-click.

En este caso se usará la clase Hijo para definir la estructura que tendrá el json. Hijo es un pojo sencillo como se ve a continuación:

El siguiente código muestra como leer una cadena json haciendo uso de la librería gson y sus métodos, para instanciar un objeto Hijo con sus datos según el json:


Este código da como resultado lo siguiente:

  45
  Pepe

Por otro lado si se desea escribir una cadena json en base a un objeto, en este caso Hijo, simplemente se debe utilizar el siguiente código:


El código anterior da como resultado la siguiente salida en consola:

{
   "nombre":"Juan",
   "apellido":"Carabela",
   "edad":46,
   "hijo":{
      "nombre":"Rambo",
      "apellido":"Carabela",
      "edad":21
   }
}

4 comentarios :

  1. Hola me gustaria saber como leer el ultimo ejemplo, gracias.

    ResponderEliminar
    Respuestas
    1. Se te refieres al json despleagado al final, basta con tomar ese String y crear un nuevo hijo:
      Hijo hijo = gson.fromJson(json, Hijo.class);
      Toma en cuenta que para incluir en un String las comillas (") en java debes agregarle un slash invertido de la siguienter forma \".
      Saludos.

      Eliminar
  2. hola, como se convertiria a objetos esto:

    [{"estadoacademicoSimple":[{"legajo":"1231","estadoAcademico":"regular","carreraSimple":{"nombre":"sistemas"},"fechaIngreso":"Mar 30, 2008 12:00:00 AM","fechaBaja":"Nov 30, 2013 12:00:00 AM"},{"legajo":"1233","estadoAcademico":"libre","carreraSimple":{"nombre":"quimica"},"fechaIngreso":"Jul 30, 2008 12:00:00 AM","fechaBaja":"Nov 30, 2013 12:00:00 AM"}]}]


    Tengo entendido que al ser una lista de estados academicos debo definir un tipo con type, y ademas un array de los estados.
    Saludos y gracias

    ResponderEliminar
    Respuestas
    1. Hola, al ser un array que puede ser de cualquier tipo tienes que definir un tipo como te muestro a continuación.
      Type type = new TypeToken>(){}.getType();

      El objeto quedaría como:
      class EstadosAcademicos{
      List estadoacademicoSimple;
      }

      class EstadoAcademicoSimple{
      String legajo;
      String estadoAcademico;
      CarreraSimple carreraSimple;
      Date fechaIngreso;
      Date fechaBaja;
      }

      class CarreraSimple{
      String nombre;
      }

      No es exactamente esa pero debería darte una idea.

      Saludos.

      Eliminar