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.

Usar Jackson 2.x para convertir un objeto Java a JSON

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.

Uso de Jackson 2.x para crear un objeto Java desde un archivo o texto JSON

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.

Usando la anotación @JsonView

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

Entradas populares de este blog

Conectar SQL Server con Java

Entrenar OpenCV en Detección de Objetos

Procesamiento de imágenes en OpenCV

Acceso a la webcam con OpenCV

Conociendo la clase cv::Mat de OpenCV