overzicht
deze tutorial richt zich op het begrijpen van de Jackson ObjectMapper klasse en hoe Java objecten serialiseren in JSON en JSON string deserialiseren in Java objecten.
om meer te begrijpen over de Jackson library in het algemeen, is de Jackson Tutorial een goede plek om te beginnen.,
verder lezen:
overerving met Jackson
Jackson JSON Views
Jackson – aangepaste Serializer
afhankelijkheden
laten we eerst de volgende afhankelijkheden toevoegen aan de pom.xml:
deze afhankelijkheid zal ook transitief de volgende bibliotheken toevoegen aan het classpath:
- jackson-annotations
- jackson-core
Gebruik altijd de nieuwste versies van de Maven central repository voor jackson-databind.
lezen en schrijven met behulp van ObjectMapper
laten we beginnen met de basis lees-en schrijfbewerkingen.,
de eenvoudige readValue API van de ObjectMapper is een goed toegangspunt. We kunnen het gebruiken om JSON-inhoud te ontleden of deserialiseren in een Java-object.
aan de schrijfzijde kunnen we ook de WRITEVALUE API gebruiken om elk Java-object als JSON-uitvoer te serialiseren.
we gebruiken de volgende Autoklasse met twee velden als het object om in dit artikel te serialiseren of te deserialiseren:
public class Car { private String color; private String type; // standard getters setters}
3.1., Java-Object om de JSON –
Laten we zien een eerste voorbeeld van het serialiseren van een Java-object in JSON met behulp van de writeValue methode van de ObjectMapper klasse:
De output van het bovenstaande in het bestand:
{"color":"yellow","type":"renault"}
De methoden writeValueAsString en writeValueAsBytes van ObjectMapper klasse genereren van een JSON van een Java-object en de terugkeer van de gegenereerde JSON als string of als een byte array:
String carAsString = objectMapper.writeValueAsString(car);
3.2., JSON naar Java Object
Hieronder is een eenvoudig voorbeeld van het omzetten van een JSON-String naar een Java object met behulp van de ObjectMapper klasse:
String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";Car car = objectMapper.readValue(json, Car.class);
De readValue() functie accepteert ook andere vormen van input, zoals een bestand met JSON-string:
Car car = objectMapper.readValue(new File("src/test/resources/json_car.json"), Car.class);
of een URL:
Car car = objectMapper.readValue(new URL("file:src/test/resources/json_car.json"), Car.class);
3.3. JSON naar Jackson Jsonnode
als alternatief kan een JSON worden ontleed in een jsonnode object en worden gebruikt om gegevens op te halen uit een specifiek knooppunt:
3.4., Het maken van een Java lijst van een JSON Array String
we kunnen een JSON in de vorm van een array ontleden in een Java object list met behulp van een TypeReference:
3.5. Java Map aanmaken van JSON String
evenzo kunnen we een JSON ontleden in een Java Map:
geavanceerde functies
een van de grootste sterke punten van de Jackson library is het zeer aanpasbare serialisatie-en deserialisatieproces.,
in deze sectie gaan we door een aantal geavanceerde functies waar de input of de output JSON-respons kan verschillen van het object dat de respons genereert of verbruikt.
4.1., Serialisatie-of Deserialisatiefunctie configureren
tijdens het converteren van JSON-objecten naar Java-klassen, zal het standaardproces resulteren in een uitzondering:
String jsonString = "{ \"color\" : \"Black\", \"type\" : \"Fiat\", \"year\" : \"1970\" }";
de JSON-tekenreeks in de bovenstaande voorbeeld in de standaard parsing proces naar het Java-object voor de klasse auto zal resulteren in de niet-herkende propertyexception uitzondering.,
Via het configureren methode, we kunnen uitbreiden van de standaard proces voor het negeren van de nieuwe velden in:
Nog een andere optie is gebaseerd op de FAIL_ON_NULL_FOR_PRIMITIVES, die definieert als de null-waarden voor de primitieve waarden zijn toegestaan:
objectMapper.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, false);
Ook FAIL_ON_NUMBERS_FOR_ENUM controles als enum waarden mogen worden geserialiseerd/gedeserialiseerd cijfers:
objectMapper.configure(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS, false);
U vindt de uitgebreide lijst van serialisatie en deserialisatie functies op de officiële site.
4.2., Het maken van aangepaste Serializer of Deserializer
een ander essentieel kenmerk van de ObjectMapper klasse is de mogelijkheid om een aangepaste serializer en deserializer te registreren.
aangepaste serializers en deserializers zijn erg handig in situaties waarin de input of de output JSON-reactie een andere structuur heeft dan de Java-klasse waarin het moet worden geserialiseerd of gedeserialiseerd.,
Hieronder is een voorbeeld van een aangepaste JSON-serializer:
Deze aangepaste serializer kan worden ingeroepen als dit:
Hier is hoe de Auto eruit ziet (als JSON output) op de client:
var carJson = {"car_brand":"renault"}
hier is een voorbeeld van een aangepaste JSON deserializer:
Deze aangepaste deserializer kan een beroep worden gedaan op deze manier:
4.3. Afhandeling van datumformaten
de standaard serialisatie van java.util.Datum produceert een nummer, i.,e., epoch tijdstempel (aantal milliseconden Sinds 1 januari 1970, UTC). Maar dit is niet erg menselijk leesbaar en vereist verdere conversie worden weergegeven in een menselijk leesbaar formaat.
laten we de auto-instantie die we tot nu toe in de Request-klasse hebben gebruikt, omwikkelen met de eigenschap dategekochte:
public class Request { private Car car; private Date datePurchased; // standard getters setters}
om het Tekenreeksformaat van een datum te controleren en deze in te stellen op bijvoorbeeld JJJJ-MM-dd HH:mm A z, overweeg het volgende fragment:
om meer te weten te komen over het serialiseren van datums met Jackson, lees onze meer diepgaande write-up.
4.4., Handling Collections
een andere kleine maar handige functie die beschikbaar is via de DeserializationFeature class is de mogelijkheid om het type collectie te genereren dat we willen van een JSON Array respons.
bijvoorbeeld, we kunnen het resultaat genereren als een array:
of als een lijst:
meer informatie over het omgaan met Verzamelingen met Jackson is hier beschikbaar.
conclusie
Jackson is een solide en volwassen JSON serialisatie / deserialisatie bibliotheek voor Java., De ObjectMapper API biedt een eenvoudige manier om te ontleden en het genereren van JSON reactie objecten met veel flexibiliteit. Dit artikel besprak de belangrijkste functies die de bibliotheek zo populair maken.