Cómo convertir un objeto JSON a un objeto Java con Jackson

En este tutorial, veremos cómo convertir un objeto JSON en un objeto Java personalizado, utilizando Jackson, una biblioteca de enlace de datos extremadamente popular.

En este tutorial, veremos cómo convertir un objeto JSON en un objeto Java usando jackson, una biblioteca de vinculación de datos extremadamente popular. para Java.

Específicamente, trabajaremos con este objeto JSON:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
   "name":"David",
   "position":"Software Engineer",
   "skilltree":[
      "Java",
      "Python",
      "JavaScript"
   ],
   "address":{
      "street":"Street",
      "streetNo":"123"
   }
}

Como estamos trabajando con una biblioteca externa, agreguemos la dependencia. Si está utilizando Maven, puede agregarlo con:

1
2
3
4
5
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.3</version>
</dependency>

O si está usando Gradle, puede agregar:

1
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.11.3'

Creación de una clase personalizada

Una vez hecho esto, podemos crear una clase personalizada simple para alojar nuestra información de Empleado del contenido de JSON:

1
2
3
4
5
6
7
8
9
public class Employee {

    private String name;
    private POSITION position;
    private List<String> skilltree;
    private Address address;

    // Constructors, Getters, Setters, toString()
}

Nota: Si queremos que Jackson pueda vincular automáticamente las propiedades de nuestra clase y las propiedades en el objeto JSON, deben tener exactamente los mismos nombres. Cubriremos cómo cambiar este comportamiento un poco más tarde. Además, querrá tener un constructor vacío para la creación de instancias.

Aquí, estamos usando una enumeración, POSICIÓN, que se ve así:

1
2
3
public enum POSITION {
    MANAGER, SOFTWARE_ENGINEER, CEO
}

Y un objeto Dirección:

1
2
3
4
5
6
7
public class Address {
    private String street;
    private String streetNo;

    // Constructors, Getters and Setters, toString()
    
}

Convertir objeto JSON en objeto Java

La clase central de Jackson es ObjectMapper. Es la API principal para el enlace de datos relacionados con objetos y la usará todo el tiempo con Jackson.

Para convertir un objeto JSON en un objeto Java, utilizará el método readValue() de la instancia ObjectMapper, que lo deserializa en la referencia de clase proporcionada:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
String json = "{ \"name\":\"David\", \"position\":\"SOFTWARE_ENGINEER\", \"skilltree\":[ \"Java\", \"Python\", \"JavaScript\" ], \"address\":{ \"street\":\"Street\", \"streetNo\":\"123\" } }";

// ObjectMapper instantiation
ObjectMapper objectMapper = new ObjectMapper();

// Deserialization into the `Employee` class
Employee employee = objectMapper.readValue(json, Employee.class);

// Print information
System.out.println(employee);

Ejecutar este código dará como resultado:

1
Employee{name='David', position=SOFTWARE_ENGINEER, skillTree=[Java, Python, JavaScript], address=Address{street='Street', streetNo='123'}}

Otra forma de crear un aviso para que Jackson sepa en qué clase debe deserializarse es usar una TypeReference:

1
Employee employee = objectMapper.readValue(json, new TypeReference<Employee>(){});

Imprimir esta instancia de empleado también dará como resultado:

1
Employee{name='David', position=SOFTWARE_ENGINEER, skillTree=[Java, Python, JavaScript], address=Address{street='Street', streetNo='123'}}

Ambos construyen el objeto dado y llaman exactamente al mismo proceso de deserialización. Entonces, la única diferencia entre estas dos llamadas es si está haciendo una referencia estática o dinámica al tipo.