Oversigt
Denne vejledning fokuserer på en forståelse af Jackson ObjectMapper klassen, og hvordan man serialiserer Java-objekter i JSON og deserialisere JSON strengen ind i Java-objekter.
for at forstå mere om Jackson-biblioteket generelt er Jackson-vejledningen et godt sted at starte.,
Yderligere læsning:
Arv med Jackson
Jackson JSON visninger
Jackson – Custom Serializer
afhængigheder
lad os først tilføje følgende afhængigheder til pom.xml:
Denne afhængighed vil også transitivt tilføje følgende biblioteker til classpath:
- jackson-kommentarer
- jackson-core
Altid bruge de seneste versioner fra Maven centrale register for jackson-databind.
Læsning og Skrivning ved Hjælp af ObjectMapper
Lad os starte med de grundlæggende læse-og skrive-operationer.,
den simple readValue API af ObjectMapper er en god indgang. Vi kan bruge det til at analysere eller deserialisere JSON-indhold i et Java-objekt.
også på skrivesiden kan vi bruge APRITEVALUE API til at serialisere ethvert Java-objekt som JSON-output.
vi bruger følgende bilklasse med to felter som genstand for serialisering eller deserialisering i hele denne artikel:
public class Car { private String color; private String type; // standard getters setters}
3.1., Java-Objekt til JSON
Lad os se et første eksempel på fortløbende en Java-objekt i JSON hjælp writeValue metode af ObjectMapper klasse:
output af de ovennævnte i filen vil være:
{"color":"yellow","type":"renault"}
De metoder, writeValueAsString og writeValueAsBytes af ObjectMapper klasse generere en JSON fra en Java-objekt og returnere den genererede JSON som en streng, eller som et byte array:
String carAsString = objectMapper.writeValueAsString(car);
3.2., JSON til Java-Objekt
Nedenfor er et simpelt eksempel for at konvertere en JSON Streng til et Java-objekt ved hjælp af ObjectMapper klasse:
String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";Car car = objectMapper.readValue(json, Car.class);
readValue () – funktionen accepterer også andre former for input, såsom en fil, der indeholder JSON string:
Car car = objectMapper.readValue(new File("src/test/resources/json_car.json"), Car.class);
eller en URL:
Car car = objectMapper.readValue(new URL("file:src/test/resources/json_car.json"), Car.class);
3.3. JSON til Jackson JsonNode
Alternativt kan en JSON analyseres i et jsonnode-objekt og bruges til at hente data fra en bestemt node:
3.4., Oprettelse af en Java-Liste Fra en JSON Array String
Vi kan parse JSON-i form af et array i et Java-objekter ved hjælp af en TypeReference:
3.5. Oprettelse af Java-Kort Fra JSON String
på samme måde, vi kan parse JSON-i et Java-Kort:
Avancerede Funktioner
En af de største styrker i Jackson bibliotek er meget tilpasselig serialisering og deserialisering proces.,
i dette afsnit gennemgår vi nogle avancerede funktioner, hvor input eller output JSON-svaret kan være anderledes end det objekt, der genererer eller forbruger svaret.
4. 1., Konfiguration af Serialisering eller Deserialization Funktion
under konvertering JSON objekter til Java-klasser, hvis JSON strengen har nogle nye felter, standard proces vil resultere i en undtagelse:
String jsonString = "{ \"color\" : \"Black\", \"type\" : \"Fiat\", \"year\" : \"1970\" }";
JSON string i ovenstående eksempel i standard parsing proces til Java objekt for den Klasse Bil vil resultere i UnrecognizedPropertyException undtagelse.,
Gennem konfigurere metode, kan vi forlænge det standard proces, at ignorere de nye felter:
Endnu en mulighed er baseret på FAIL_ON_NULL_FOR_PRIMITIVES, som definerer om en null-værdier for primitive værdier er tilladte:
objectMapper.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, false);
på samme måde, FAIL_ON_NUMBERS_FOR_ENUM kontrol, hvis enum værdier er tilladt at føljeton/deserialized som tal:
objectMapper.configure(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS, false);
Du kan finde en omfattende liste af serialisering og deserialisering funktioner på den officielle hjemmeside.
4, 2., Oprettelse af Brugerdefinerede Serializer eller Deserializer
et Andet væsentligt element af ObjectMapper klasse er i stand til at registrere en brugerdefineret serializer og deserializer.
brugerdefinerede serialiizersers og deserialiizersers er meget nyttige i situationer, hvor input eller output JSON-svaret er anderledes i struktur end Java-klassen, hvor det skal serialiseres eller deserialiseres.,
Nedenfor er et eksempel på en tilpasset JSON serializer:
Denne skik serializer kan påberåbes som dette:
Her er hvad Bilen ligner (som JSON output) på klient-side:
var carJson = {"car_brand":"renault"}
Og her er et eksempel på et brugerdefineret JSON deserializer:
Denne skik deserializer kan aktiveres på denne måde:
4.3. Håndtering datoformater
standard serialisering af java.util.Dato producerer et nummer, jeg.,e., epoke tidsstempel (antal millisekunder siden 1.januar 1970, UTC). Men dette er ikke meget menneskeligt læsbart og kræver, at yderligere konvertering vises i et menneskeligt læsbart format.
Lad os afslutte Bilen eksempel brugte vi så langt inde i de Anmodning klasse med datePurchased ejendom:
public class Request { private Car car; private Date datePurchased; // standard getters setters}
til At styre String format af en dato og sæt det til, fx, åååå-MM-dd HH:mm a z, skal du overveje følgende uddrag:
for At lære mere om fortløbende datoer med Jackson, læse vores mere dybdegående skrive-up.
4.4., Håndtering af Samlinger
en Anden lille, men nyttig funktion, der er tilgængelig gennem DeserializationFeature klasse er evnen til at skabe den type af kollektion, vi ønsker fra en JSON Array svar.
For eksempel, kan vi generere resultatet som en matrix:
Eller som en Liste:
Mere information om håndtering af samlinger med Jackson er tilgængelige her.
konklusion
Jackson er et solidt og modent JSON-serialisering / deserialiseringsbibliotek til Java., ObjectMapper API giver en enkel måde at analysere og generere JSON respons objekter med en masse fleksibilitet. Denne artikel diskuterede de vigtigste funktioner, der gør biblioteket så populært.