Getting Started
Getting Started
La librería Jackson es una de las herramientas más populares y potentes para procesar JSON en Java. Permite trabajar con datos JSON de manera sencilla, rápida y eficiente. A continuación, te explico todo lo necesario para entender y usar Jackson en tus proyectos:
La librería Jackson es una de las herramientas más populares y potentes para procesar JSON en Java. Permite trabajar con datos JSON de manera sencilla, rápida y eficiente. A continuación, te explico todo lo necesario para entender y usar Jackson en tus proyectos:
1. ¿Qué es Jackson?
Jackson es una biblioteca de Java para:
- Convertir objetos Java a JSON (serialización).
- Convertir JSON a objetos Java (deserialización).
- Manejar y manipular nodos JSON directamente.
Es parte del ecosistema FasterXML y consta de varios módulos que amplían su funcionalidad.
2. Componentes principales de Jackson
Jackson está compuesto por varios módulos:
a. jackson-databind
- Es el núcleo de Jackson y ofrece soporte para serialización y deserialización de POJOs (Plain Old Java Objects).
b. jackson-core
- Proporciona las funcionalidades básicas para procesar JSON.
- Incluye un parser (JsonParser) para leer JSON y un generador (JsonGenerator) para escribir JSON.
c. jackson-annotations
- Contiene anotaciones para personalizar la serialización/deserialización.
Otros módulos avanzados
jackson-datatype-*: Para manejar tipos específicos comoLocalDate,BigDecimal, etc.jackson-module-kotlin: Compatibilidad con Kotlin.jackson-dataformat-*: Manejo de formatos alternativos como YAML, XML, CSV, etc.
4. Operaciones básicas
a. Crear un objeto ObjectMapper
El ObjectMapper es el núcleo de Jackson. Es el encargado de convertir entre JSON y objetos Java.
import com.fasterxml.jackson.databind.ObjectMapper;
ObjectMapper objectMapper = new ObjectMapper();
b. Serialización: Convertir un objeto Java a JSON
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
// Crear un objeto Java
Persona persona = new Persona("Juan", 25);
// Convertir el objeto a JSON
String json = objectMapper.writeValueAsString(persona);
System.out.println(json);
}
}
class Persona {
private String nombre;
private int edad;
// Constructor, getters y setters
public Persona(String nombre, int edad) {
this.nombre = nombre;
this.edad = edad;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
}
Salida:
{"nombre":"Juan","edad":25}
c. Deserialización: Convertir JSON a un objeto Java
String json = "{\"nombre\":\"Juan\",\"edad\":25}";
// Convertir JSON a un objeto Java
Persona persona = objectMapper.readValue(json, Persona.class);
System.out.println(persona.getNombre()); // Juan
5. Anotaciones de Jackson
Jackson proporciona varias anotaciones para personalizar el comportamiento:
a. @JsonProperty
Define el nombre del campo en JSON.
public class Persona {
@JsonProperty("nombre_completo")
private String nombre;
private int edad;
}
b. @JsonIgnore
Excluye un campo durante la serialización.
public class Persona {
private String nombre;
@JsonIgnore
private int edad;
}
c. @JsonInclude
Excluye valores nulos o predeterminados.
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Persona {
private String nombre;
private Integer edad;
}
d. @JsonFormat
Define el formato de fechas.
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy")
private Date fechaNacimiento;
6. Manejo de nodos JSON dinámicos
Si trabajas con JSON dinámico, puedes usar la clase JsonNode:
import com.fasterxml.jackson.databind.JsonNode;
String json = "{\"nombre\":\"Juan\",\"edad\":25}";
JsonNode node = objectMapper.readTree(json);
System.out.println(node.get("nombre").asText()); // Juan
System.out.println(node.get("edad").asInt()); // 25
7. Configuración avanzada
a. Ignorar campos desconocidos
Cuando el JSON tiene más campos de los que la clase Java define:
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
b. Serialización bonita (Pretty Print)
Para generar JSON formateado:
String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(objeto);
System.out.println(json);
c. Customizadores
Puedes registrar módulos o personalizar serializadores/deserializadores.
SimpleModule module = new SimpleModule();
module.addSerializer(CustomType.class, new CustomSerializer());
objectMapper.registerModule(module);
8. Compatibilidad con otros formatos
Jackson tiene extensiones para manejar otros formatos:
- XML: Usa
jackson-dataformat-xml. - YAML: Usa
jackson-dataformat-yaml. - CSV: Usa
jackson-dataformat-csv.
Ejemplo con YAML:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.15.2</version>
</dependency>
ObjectMapper yamlMapper = new ObjectMapper(new YAMLFactory());
String yaml = yamlMapper.writeValueAsString(persona);