Java Jackson-Bibliothek
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):<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
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
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
.writeAsString(person);
System.out.println(prettyJson);
/*
Ausgabe:
{
"name" : "Zhang San",
"age" : 25
}
*/
JSON-Deserialisierung (JSON → Objekt)
Einfaches Beispiel
Beispiel
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
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
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
String name = rootNode.get("name").asText();
int age = rootNode.get("age").asInt();
Best Practices
- ObjectMapper wiederverwenden: Das Erstellen
ObjectMapperInstanzen sind teuer zu erstellen; dieselbe Instanz sollte wiederverwendet werden - Ausnahmen behandeln: Immer behandeln
JsonProcessingExceptionundIOException - DTO-Muster verwenden: Domänenmodelle nicht direkt serialisieren; dedizierte Datenübertragungsobjekte (DTO) verwenden
- Leistung berücksichtigen: Für Hochleistungsszenarien können Sie
JsonFactoryfü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.
Andere Erweiterungen
Gängige Java-Bibliotheken