Site Overlay

Intro to the Jackson ObjectMapper (Deutsch)

Overview

Dieses Tutorial konzentriert sich auf das Verständnis der Jackson ObjectMapper Klasse und wie Java-Objekte in JSON serialisieren und JSON-String in Java-Objekte deserialisieren.

Um mehr über die Jackson-Bibliothek im Allgemeinen zu erfahren, ist das Jackson-Tutorial ein guter Anfang.,

Weitere Informationen:

Vererbung mit Jackson

Dieses Tutorial zeigt, wie die Einbeziehung von Subtyp-Metadaten und das Ignorieren von Eigenschaften, die von Superklassen mit Jackson geerbt wurden, behandelt werden.
Lesen Sie mehr →

Jackson JSON Views

So verwenden Sie die Annotation @JsonView in Jackson, um die Serialisierung Ihrer Objekte (ohne und mit Spring) perfekt zu steuern.
Lesen Sie mehr →

Jackson Benutzerdefinierte Serializer

Steuern Sie Ihre JSON-Ausgabe mit Jackson 2 mithilfe einer Benutzerdefinierten Serializer.,
Lesen Sie mehr →

Abhängigkeiten

Fügen wir dem pom zuerst die folgenden Abhängigkeiten hinzu.xml:

Diese Abhängigkeit fügt dem Klassenpfad auch transitiv die folgenden Bibliotheken hinzu:

  1. jackson-annotations
  2. jackson-core

Verwenden Sie immer die neuesten Versionen aus dem zentralen Maven-Repository für jackson-databind.

Lesen und Schreiben Mit ObjectMapper

beginnen wir mit den grundlegenden lese-und Schreibvorgänge.,

Die einfache readValue API des ObjectMapper ist ein guter Einstieg. Wir können es verwenden, um JSON-Inhalte in ein Java-Objekt zu analysieren oder zu deserialisieren.

Auf der Schreibseite können wir auch die writeValue-API verwenden, um jedes Java-Objekt als JSON-Ausgabe zu serialisieren.

Wir verwenden die folgende Car-Klasse mit zwei Feldern als Objekt zum Serialisieren oder Deserialisieren in diesem Artikel:

public class Car { private String color; private String type; // standard getters setters}

3.1., Java-Objekt zu JSON

Sehen wir uns ein erstes Beispiel für die Serialisierung eines Java-Objekts in JSON mit der writeValue-Methode der ObjectMapper-Klasse an:

Die Ausgabe des obigen in der Datei lautet:

{"color":"yellow","type":"renault"}

Die Methoden writeValueAsString und writeValueAsBytes der ObjectMapper-Klasse generieren einen JSON aus einem Java-Objekt und geben den generierten JSON als String oder als Byte-Array zurück:

String carAsString = objectMapper.writeValueAsString(car);

3.2., JSON to Java Object

Unten finden Sie ein einfaches Beispiel für die Konvertierung einer JSON-Zeichenfolge in ein Java-Objekt mithilfe der ObjectMapper-Klasse:

String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";Car car = objectMapper.readValue(json, Car.class);

Die Funktion readValue() akzeptiert auch andere Eingabeformen, z. B. eine Datei mit JSON-Zeichenfolge:

Car car = objectMapper.readValue(new File("src/test/resources/json_car.json"), Car.class);

oder eine URL:

Car car = objectMapper.readValue(new URL("file:src/test/resources/json_car.json"), Car.class);

3.3. JSON zu Jackson JsonNode

Alternativ kann ein JSON in ein JsonNode-Objekt analysiert und zum Abrufen von Daten von einem bestimmten Knoten verwendet werden:

3.4., Erstellen einer Java-Liste aus einer JSON-Array-Zeichenfolge

Wir können einen JSON in Form eines Arrays mit einer TypeReference in eine Java-Objektliste parsen:

3.5. Erstellen einer Java-Map aus der JSON-Zeichenfolge

Ebenso können wir einen JSON in eine Java-Map analysieren:

Erweiterte Funktionen

Eine der größten Stärken der Jackson-Bibliothek ist der hochgradig anpassbare Serialisierungs-und Deserialisierungsprozess.,

In diesem Abschnitt werden einige erweiterte Funktionen beschrieben, bei denen sich die Eingabe-oder Ausgabe-JSON-Antwort von dem Objekt unterscheiden kann, das die Antwort generiert oder verbraucht.

4.1., Konfigurieren der Serialisierungs-oder Deserialisierungsfunktion

Beim Konvertieren von JSON-Objekten in Java-Klassen führt der Standardprozess zu einer Ausnahme:

String jsonString = "{ \"color\" : \"Black\", \"type\" : \"Fiat\", \"year\" : \"1970\" }";

Die JSON-Zeichenfolge im obigen Beispiel im Standard-Parsing-Prozess für das Java-Objekt für die Klasse Auto wird in der UnrecognizedPropertyException Ausnahme führen.,

Über die configure-Methode können wir den Standardprozess erweitern, um die neuen Felder zu ignorieren:

Eine weitere Option basiert auf den FAIL_ON_NULL_FOR_PRIMITIVES, die definiert, ob die Nullwerte für primitive Werte zulässig sind:

objectMapper.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, false);

Ebenso steuert FAIL_ON_NUMBERS_FOR_ENUM, ob Enum-Werte serialisiert werden dürfen/deserialisiert als Zahlen:

objectMapper.configure(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS, false);

Die umfassende Liste der Serialisierungs-und Deserialisierungsfunktionen finden Sie auf der offiziellen Website.

4.2., Erstellen eines benutzerdefinierten Serialisierers oder Deserialisierers

Ein weiteres wesentliches Merkmal der ObjectMapper-Klasse ist die Möglichkeit, einen benutzerdefinierten Serialisierer und Deserialisierer zu registrieren.

Benutzerdefinierte Serialisierer und Deserialisierer sind sehr nützlich in Situationen, in denen sich die Eingabe-oder Ausgabe-JSON-Antwort in ihrer Struktur von der Java-Klasse unterscheidet, in die sie serialisiert oder deserialisiert werden muss.,

Unten finden Sie ein Beispiel für einen benutzerdefinierten JSON-Serialisierer:

Dieser benutzerdefinierte Serialisierer kann folgendermaßen aufgerufen werden:

So sieht das Auto (als JSON-Ausgabe) auf der Clientseite aus:

var carJson = {"car_brand":"renault"}

Und hier ist ein Beispiel für einen benutzerdefinierten JSON-Deserialisierer:

Dieser benutzerdefinierte Deserialisierer kann auf diese Weise aufgerufen werden:

4.3. Umgang mit Datumsformaten

Die Standardserialisierung von Java.util.Datum erzeugt eine Zahl, ich.,e., Epoche Zeitstempel (Anzahl der Millisekunden seit dem 1. Januar 1970, UTC). Dies ist jedoch nicht sehr menschenlesbar und erfordert eine weitere Konvertierung, um in einem menschenlesbaren Format angezeigt zu werden.

Wickeln wir die bisher verwendete Car-Instanz in die Request-Klasse mit der datePurchased-Eigenschaft ein:

public class Request { private Car car; private Date datePurchased; // standard getters setters}

Um das Zeichenfolgenformat eines Datums zu steuern und es z. B. auf yyyy-MM-dd HH:mm a z festzulegen, beachten Sie das folgende Snippet:

Um mehr über die Serialisierung von Daten mit Jackson zu erfahren, lesen Sie mehr in-tiefe Abschreibung.

4.4., Umgang mit Sammlungen

Eine weitere kleine, aber nützliche Funktion, die über die DeserializationFeature-Klasse verfügbar ist, ist die Möglichkeit, den gewünschten Sammlungstyp aus einer JSON-Array-Antwort zu generieren.

Zum Beispiel können wir das Ergebnis als Array generieren:

Oder als Liste:

Weitere Informationen zum Umgang mit Sammlungen mit Jackson finden Sie hier.

Jackson ist eine solide und ausgereifte JSON-Serialisierungs – /Deserialisierungsbibliothek für Java., Die ObjectMapper-API bietet eine einfache Möglichkeit, JSON-Antwortobjekte mit viel Flexibilität zu analysieren und zu generieren. In diesem Artikel wurden die Hauptmerkmale besprochen, die die Bibliothek so beliebt machen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.