Librería Java Jackson
Jackson es una librería de alto rendimiento para el procesamiento de JSON en Java, que permite:
- Serializar objetos Java a formato JSON (objeto → JSON)
- Deserializar JSON a objetos Java (JSON → objeto)
Debido a su velocidad, potentes funciones y facilidad de uso, Jackson se ha convertido en una de las librerías de procesamiento de JSON más populares en el ecosistema Java.
Módulos principales de Jackson
- 1. Jackson Core: el módulo central de Jackson, que proporciona funciones básicas de análisis y generación de JSON.
- 2. Jackson Annotations: contiene varias anotaciones para controlar el proceso de serialización y deserialización.
- 3. Jackson Databind: proporciona funciones de vinculación de datos, permitiendo la conversión entre objetos Java y JSON.
Uso básico
Agregar dependencia
Primero, debe agregar la dependencia de Jackson en el proyecto (con Maven como ejemplo):<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
Un ejemplo sencillo para convertir entre objetos Java y JSON:
Ejemplo
public class JacksonDemo {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// Convertir objeto Java a JSON
Person person = new Person(Zhang San, 30);
String json = mapper.writeValueAsString(person);
System.out.println(json);
// Convertir JSON a objeto Java
Person parsedPerson = mapper.readValue(json, Person.class);
System.out.println(parsedPerson);
}
}
class Person {
private String name;
private int age;
// Debe tener constructor sin argumentos
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Debe tener getter y setter
// Se omiten getter/setter y el método toString
}
Crear ObjectMapper
ObjectMapperEs la clase central de Jackson, responsable de la serialización y deserialización:
ObjectMapper mapper = new ObjectMapper();
Serialización JSON (objeto → JSON)
Ejemplo sencillo
Ejemplo
private String name;
private int age;
// Se omiten el constructor, getter y setter
}
Person person = new Person(Zhang San, 25);
String json = mapper.writeValueAsString(person);
System.out.println(json);
// Salida: {"name":"Zhang San","age":25}
Salida formateada
Ejemplo
.writeValueAsString(person);
System.out.println(prettyJson);
/*
Salida:
{
"name" : "张三",
"age" : 25
}
*/
Deserialización JSON (JSON → objeto)
Ejemplo sencillo
Ejemplo
Person person = mapper.readValue(json, Person.class);
System.out.println(person.getName()); // Salida: Li Si
Leer desde un archivo
Person person = mapper.readValue(new File("person.json"), Person.class);
Anotaciones comunes
Jackson proporciona varias anotaciones para controlar el proceso de serialización y deserialización:
@JsonProperty
Especificar el nombre de la propiedad JSON:
@JsonProperty("user_name")
private String name;
@JsonIgnore
Ignorar un campo:
@JsonIgnore private String password;
@JsonFormat
Formatear fecha:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") private Date birthDate;
Manejo de tipos complejos
Tipos de colecciones
Ejemplo
new Person(Wang Wu, 28),
new Person(Zhao Liu, 32)
);
String json = mapper.writeValueAsString(people);
// Salida: [{"name":"王五","age":28},{"name":"赵六","age":32}]
Tipo Map
Ejemplo
data.put("name", Zhang San);
data.put("age", 25);
data.put("isStudent", true);
String json = mapper.writeValueAsString(data);
// Salida: {"name":"张三","age":25,"isStudent":true}
Características avanzadas
Serialización/deserialización personalizada
Mediante herenciaJsonSerializeryJsonDeserializerSe puede implementar lógica personalizada de serialización y deserialización.
Manejo de tipos polimórficos
Uso de@JsonTypeInfoy@JsonSubTypesanotaciones para manejar herencia y polimorfismo.
Modelo de árbol
Jackson proporciona la API de modelo de árbol, que permite operar directamente con nodos JSON:
Ejemplo
String name = rootNode.get("name").asText();
int age = rootNode.get("age").asInt();
Mejores prácticas
- Reutilizar ObjectMapper: crear
ObjectMapperuna instancia de ObjectMapper tiene un costo alto, se debe reutilizar la misma instancia. - Manejo de excepciones: siempre manejar
JsonProcessingExceptionyIOException - Usar el patrón DTO: no serializar directamente el modelo de dominio; usar un objeto de transferencia de datos (DTO) específico.
- Considerar el rendimiento: para escenarios de alto rendimiento, se puede usar
JsonFactorypara realizar operaciones de bajo nivel.
Resumen
Jackson es una poderosa herramienta para manejar JSON en Java, que ofrece:
- API simple y fácil de usar
- Capacidad de procesamiento de JSON de alto rendimiento
- Amplias opciones de personalización
- Buen soporte de la comunidad
Dominar Jackson puede mejorar en gran medida la eficiencia y flexibilidad del manejo de datos JSON en el desarrollo Java.
Otras extensiones
Librerías comunes de Java