Java Jackson-Bibliothek

Java 常用类库Gängige Java-Bibliotheken


Jackson ist eine hochleistungsfähige JSON-Verarbeitungsbibliothek für Java, die Folgendes kann:

  • Java-Objekte in das JSON-Format serialisieren (Objekt → JSON)
  • JSON in Java-Objekte deserialisieren (JSON → Objekt)

Jackson ist aufgrund seiner Geschwindigkeit, Leistungsfähigkeit und Benutzerfreundlichkeit zu einer der beliebtesten JSON-Verarbeitungsbibliotheken im Java-Ökosystem geworden.

Jackson-Core-Module

  • 1. Jackson Core: Das Kernmodul von Jackson, das grundlegende JSON-Parsing- und -Generierungsfunktionen bietet.
  • 2. Jackson Annotations: Enthält verschiedene Annotationen, die zur Steuerung des Serialisierungs- und Deserialisierungsprozesses verwendet werden.
  • 3. Jackson Databind: Bietet Datenbindungsfunktionalität und ermöglicht die Konvertierung zwischen Java-Objekten und JSON.

Grundlegende Verwendung

Abhängigkeit hinzufügen

Zuerst müssen Sie die Jackson-Abhängigkeit zu Ihrem Projekt hinzufügen (mit Maven als Beispiel):
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.0</version>
</dependency>

Ein einfaches Beispiel für die Konvertierung zwischen Java- und JSON-Objekten:

Beispiel

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonDemo {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
       
        // Java-Objekt zu JSON
        Person person = new Person("Zhang San", 30);
        String json = mapper.writeValueAsString(person);
        System.out.println(json);
       
        // JSON zu Java-Objekt
        Person parsedPerson = mapper.readValue(json, Person.class);
        System.out.println(parsedPerson);
    }
}

class Person {
    private String name;
    private int age;
   
    // Muss einen Konstruktor ohne Argumente haben
    public Person() {}
   
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
   
    // Muss Getter und Setter haben
    // Getter/Setter und toString-Methode weglassen
}

ObjectMapper erstellen

ObjectMapperIst Jacksons Kernklasse, zuständig für Serialisierung und Deserialisierung:

ObjectMapper mapper = new ObjectMapper();

JSON-Serialisierung (Objekt → JSON)

Einfaches Beispiel

Beispiel

public class Person {
    private String name;
    private int age;
    // Konstruktor, Getter und Setter weglassen
}

Person person = new Person("Zhang San", 25);
String json = mapper.writeValueAsString(person);
System.out.println(json);
// Ausgabe: {"name":"Zhang San","age":25}

Formatierte Ausgabe

Beispiel

String prettyJson = mapper.writerWithDefaultPrettyPrinter()
                         .writeAsString(person);
System.out.println(prettyJson);
/*
Ausgabe:
{
"name" : "Zhang San",
  "age" : 25
}
*/


JSON-Deserialisierung (JSON → Objekt)

Einfaches Beispiel

Beispiel

String json = "{\"name\":\"Li Si\",\"age\":30}";
Person person = mapper.readValue(json, Person.class);
System.out.println(person.getName()); // Ausgabe: Li Si

Aus Datei lesen

Person person = mapper.readValue(new File("person.json"), Person.class);

Gängige Annotationen

Jackson bietet verschiedene Annotationen, um den Serialisierungs- und Deserialisierungsprozess zu steuern:

@JsonProperty

JSON-Eigenschaftsnamen angeben:

@JsonProperty("user_name")
private String name;

@JsonIgnore

Ein bestimmtes Feld ignorieren:

@JsonIgnore
private String password;

@JsonFormat

Datumsangaben formatieren:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date birthDate;

Umgang mit komplexen Typen

Sammlungstypen

Beispiel

List people = Arrays.asList(
    new Person("Wang Wu", 28),
    new Person("Zhao Liu", 32)
);

String json = mapper.writeValueAsString(people);
// Ausgabe: [{"name":"Wang Wu","age":28},{"name":"Zhao Liu","age":32}]

Map-Typ

Beispiel

Map<String, Object> data = new HashMap<>();
data.put("name", "Zhang San");
data.put("age", 25);
data.put("isStudent", true);

String json = mapper.writeValueAsString(data);
// Ausgabe: {"name":"Zhang San","age":25,"isStudent":true}

Erweiterte Funktionen

Benutzerdefinierte Serialisierung/Deserialisierung

Durch VererbungJsonSerializerundJsonDeserializerBenutzerdefinierte Serialisierungs- und Deserialisierungslogik kann implementiert werden.

Polymorphe Typbehandlung

Verwenden Sie@JsonTypeInfound@JsonSubTypesAnnotationen zur Handhabung von Vererbung und Polymorphismus.

Baummodell

Jackson bietet eine Baummodell-API, die die direkte Manipulation von JSON-Knoten ermöglicht:

Beispiel

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

Best Practices

  1. ObjectMapper wiederverwenden: Das ErstellenObjectMapperInstanzen sind teuer zu erstellen; dieselbe Instanz sollte wiederverwendet werden
  2. Ausnahmen behandeln: Immer behandelnJsonProcessingExceptionundIOException
  3. DTO-Muster verwenden: Domänenmodelle nicht direkt serialisieren; dedizierte Datenübertragungsobjekte (DTO) verwenden
  4. Leistung berücksichtigen: Für Hochleistungsszenarien können SieJsonFactoryfür Low-Level-Operationen

Zusammenfassung

Jackson ist ein leistungsstarkes Werkzeug für den Umgang mit JSON in Java und bietet:

  • Einfache und benutzerfreundliche API
  • Hochperformante JSON-Verarbeitung
  • Umfangreiche Anpassungsmöglichkeiten
  • Gute Community-Unterstützung

Die Beherrschung von Jackson kann die Effizienz und Flexibilität bei der Verarbeitung von JSON-Daten in der Java-Entwicklung erheblich verbessern.

Java 常用类库Gängige Java-Bibliotheken

Andere Erweiterungen