Una de las nuevas características de Java EE 8 es el api de JSON-B, o Json Binding, que consiste en mapear cada entrada de un dato json a un objeto java.
Aquí unos ejemplos:
Y el resultado es:
Adicionalmente, podemos usar el parámetro
El resultado es sorprendente:
Aquí unos ejemplos:
De cadena json a objeto
Considerando que existe una clase
Libro
con algunas propiedades, podemos convertir rápidamente de una cadena a un objeto, siempre y cuando las propiedades coincidan. Si no coincide un atributo del json con un campo del objeto, lo pondrá nulo.String json = "{\"nombre\":\"Los gatos caen de pie\",\"anio\":1234 }"; Libro libro = JsonbBuilder.create().fromJson(json, Libro.class); System.out.println("libro:" + libro);
Y el resultado es:
libro:Libro{nombre=Los gatos caen de pie, anio=1234, isbn=null, fechaPublicacion=null}
De objeto a cadena json
Esta es otra forma muy útil. Primero instanciaremos nuestro objeto, y luego lo convertiremos:Libro libro = new Libro(); libro.setAnio(2014); libro.setNombre("Los gatos no ladran"); libro.setIsbn("123-456-789"); libro.setFechaPublicacion(new Date()); libro.setPrecio(13456.0); String json = JsonbBuilder.create(config).toJson(libro); System.out.println("json:" + json);
Adicionalmente, podemos usar el parámetro
config
para definir cómo será el json resultante:
config = new JsonbConfig() .withFormatting(true) .withDateFormat("dd-MMMM-yyyy", Locale.getDefault()) .withPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CASE_WITH_UNDERSCORES);
El resultado es sorprendente:
--- tojson --- json: { "anio": 2014, "fecha_publicacion": "20/11/2017", "isbn": "123-456-789", "nombre": "Los gatos no ladran", "valor": "13,456.00000" }