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:
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"
}
Código fuente
El código fuente del proyecto lo pueden descargar de aquí:
