Librería Java Jackson

Java 常用类库Librerías comunes de Java


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):
<dependency>
    <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

import com.fasterxml.jackson.databind.ObjectMapper;

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

public class Person {
    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

String prettyJson = mapper.writerWithDefaultPrettyPrinter()
                         .writeValueAsString(person);
System.out.println(prettyJson);
/*
Salida:
{
"name" : "张三",
  "age" : 25
}
*/


Deserialización JSON (JSON → objeto)

Ejemplo sencillo

Ejemplo

String json = "{\"name\":\"Li Si\",\"age\":30}";
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

List people = Arrays.asList(
    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

Map<String, Object> data = new HashMap<>();
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

JsonNode rootNode = mapper.readTree(json);
String name = rootNode.get("name").asText();
int age = rootNode.get("age").asInt();

Mejores prácticas

  1. Reutilizar ObjectMapper: crearObjectMapperuna instancia de ObjectMapper tiene un costo alto, se debe reutilizar la misma instancia.
  2. Manejo de excepciones: siempre manejarJsonProcessingExceptionyIOException
  3. Usar el patrón DTO: no serializar directamente el modelo de dominio; usar un objeto de transferencia de datos (DTO) específico.
  4. Considerar el rendimiento: para escenarios de alto rendimiento, se puede usarJsonFactorypara 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.

Java 常用类库Librerías comunes de Java

Otras extensiones