Jackson 2 Convertir objeto Java a JSON
Usando la librería Jackson 2.x para leer y escribir archivos en formato JavaScript Object Notation (JSON), con ella podremos mapear un objeto Java a formato JSON y realizar también el proceso inverso, convertir un texto en formato JSON a un objeto Java.
Para utilizar la librería Jackson 2.x en nuestros proyectos debemos agregar la siguiente dependencia jackson-databind a nuestro POM.
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.8</version>
</dependency>
Realizaremos nuestra seria de ejemplos sobre la clase Empleado
la cual es un POJO (Plain Old Java Object), un objeto Java simple.
public class Empleado {
private String nombre;
private String apellido;
private Integer edad;
private BigDecimal salario;
private Boolean activo;
// getter, setter, ...
}
Sí deseamos convertir un objeto de esta clase en una cadena con formato JSON necesitamos instanciar un ObjectMapper
, este también nos servirá para leer un texto en formato JSON y convertirla en un objeto Java, veamos como se hace:
Escribir archivos JSON
Primero creamos el objeto Empleado
que deseamos serializar en formato JSON y segundo instanciamos el ObjectMapper
requerido para la tarea.
Empleado empleado = new Empleado();
empleado.setActivo(Boolean.TRUE);
empleado.setApellido("Arias");
empleado.setNombre("Pedro");
empleado.setEdad(58);
empleado.setSalario(BigDecimal.valueOf(2500));
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writerWithDefaultPrettyPrinter()
.writeValueAsString(empleado);
System.out.println("SALIDA JSON: \n" + json);
Usando el método writeValueAsString(empleado)
obtenemos el String
que representa el objeto empleado en formato JSON, adicionalmente usamos writerWithDefaultPrettyPrinter()
que nos permitirá obtener una salida más legible.
Si deseamos guardar la salida en un archivo de texto en disco solo debemos usar el método apropiado, indicando el archivo que deseamos crear y el objeto a mapear, de la siguiente manera:
mapper.writerWithDefaultPrettyPrinter()
.writeValue(new File("E:\\empleado.json"), empleado);
Esto crea el archivo empleado.json en el disco E: puedes abrirlo y ver su contenido.
Leer archivos en formato JSON
Vamos a realizar el proceso inverso, tomar un archivo o una cadena de texto en formato JSON y convertirla a un objeto Java.
ObjectMapper mapper = new ObjectMapper();
Empleado emp = mapper.readValue(
new File("E:\\empleado.json"), Empleado.class);
System.out.println("OBJETO EMPLEADO: \n" + emp);
En este ejemplo el método readValue()
lee el archivo indicado y lo convierte al objeto establecido, para nosotros Empleado.class
, si lo deseamos este método está sobre-cargado para aceptar una cada de texto, un arreglo de byte y mucho más.
No solo podemos almacenar un objeto, también podemos trabajar con una lista de ellos, por ejemplo, si deseamos guardar y leer una colección de objetos Empleados hacemos lo siguiente:
private static List<Empleado> listaEmpleados() {
Empleado empleado1 = new Empleado();
empleado1.setActivo(Boolean.TRUE);
empleado1.setApellido("Arias");
empleado1.setNombre("Pedro");
empleado1.setEdad(58);
empleado1.setSalario(BigDecimal.valueOf(2500));
Empleado empleado2 = new Empleado();
empleado2.setActivo(Boolean.TRUE);
empleado2.setApellido("Maria");
empleado2.setNombre("Luna");
empleado2.setEdad(28);
empleado2.setSalario(BigDecimal.valueOf(3200));
return Arrays.asList(empleado1, empleado2);
}
Esta es la lista de empleados.
ObjectMapper mapper = new ObjectMapper();
// convertir la coleccion Java a JSON
String empleados_json = mapper.writeValueAsString(listaEmpleados());
// convertir una lista JSON a Java
List<Empleado> emps = mapper.readValue(
empleados_json,
new TypeReference<List<Empleado>>() { });
emps.forEach(System.out::println);
El secreto al leer al archivo JSON es usar la clase TypeReference
para definir como se debe convertir a un objeto List<Empleado>
.
Usando @JsonView
La anotación @JsonView
nos permite personalizar la salida JSON, es decir podemos elegir cuales propiedades del objeto Java aparecerán en la salida, para este ejemplo crearemos tres vistas, de esta manera:
public class Empleado {
public interface View1 {};
public interface View2 {};
public interface View3 extends View1 {};
@JsonView(View1.class) private String nombre;
@JsonView(View1.class) private String apellido;
@JsonView(View2.class) private Integer edad;
@JsonView(View3.class) private BigDecimal salario;
@JsonView(View3.class) private Boolean activo;
// getter, setter, ...
}
Utilizar una de estas vistas es fácil, solo usamos el método withView(Empleado.View3.class)
para indicar que vista deseamos usar para generar la salida JSON.
String json = mapper.writerWithDefaultPrettyPrinter()
.withView(Empleado.View3.class)
.writeValueAsString(empleado);
System.out.println("SALIDA JSON: \n" + json);
Con este código la salida JSON solo contendrá los campos anotado con @JsonView(View3.class)
pero como esta vista extiende View1
los campos anotados con @JsonView(View1.class)
también será incluidos en la salida.
Esta librería se integra perfectamente con Spring MVC puedes ver como usarla en una aplicación web en el tutorial Spring MVC Vistas JSON con Jackson 2.x.
Descargar: jackson2.x-java-json.zip
Comentarios
Publicar un comentario