XStream Brugervejledning: JSON

1. Oversigt

Dette er den tredje artikel i en serie om XStream. Hvis du vil lære mere om dets grundlæggende anvendelse til konvertering af Java-objekter til XML og omvendt, henvises til de tidligere artikler.

Ud over sine XML-håndteringsfunktioner kan XStream også konvertere Java-objekter til og fra JSON. I denne vejledning lærer vi om disse funktioner.

2. Forudsætninger

Inden du læser denne vejledning, skal du gennemgå den første artikel i denne serie, hvor vi forklarer det grundlæggende i biblioteket.

3. Afhængigheder

 com.thoughtworks.xstream xstream 1.4.5 

4. JSON-drivere

I de tidligere artikler lærte vi, hvordan man opsætter en XStream-forekomst og vælger en XML-driver. Tilsvarende er der to drivere til rådighed til at konvertere objekter til og fra JSON: JsonHierarchicalStreamDriver og JettisonMappedXmlDriver.

4.1. JsonHierarchicalStreamDriver

Denne førerklasse kan serieobjekter til JSON, men er ikke i stand til at deserialisere tilbage til objekter. Det kræver ikke ekstra afhængigheder, og dets førerklasse er selvstændig.

4.2. JettisonMappedXmlDriver

Denne førerklasse er i stand til at konvertere JSON til og fra objekter. Ved hjælp af denne førerklasse er vi nødt til at tilføje en ekstra afhængighed for jettison.

 org.codehaus.jettison jettison 1.3.7 

5. Serialisering af et objekt til JSON

Lad os oprette en Kunde klasse:

offentlig klasse kunde {privat streng fornavn; privat streng efternavn; private Date dob; privat streng alder; privat liste contactDetailsList; // getters og setters}

Bemærk, at vi (måske uventet) har oprettet alder som en Snor. Vi vil forklare dette valg senere.

5.1. Ved brug af JsonHierarchicalStreamDriver

Vi passerer en JsonHierarchicalStreamDriver for at oprette en XStream-forekomst.

xstream = ny XStream (ny JsonHierarchicalStreamDriver ()); dataJson = xstream.toXML (kunde);

Dette genererer følgende JSON:

{"com.baeldung.pojo.Customer": {"firstName": "John", "lastName": "Doe", "dob": "1986-02-14 16: 22: 18.186 UTC", "age": "30", "contactDetailsList": [{"mobile": "6673543265", "fastnet": "0124-2460311"}, {"mobile": "4676543565", "fastnet": "0120-223312"}]} }

5.2. JettisonMappedXmlDriver Implementering

Vi passerer en JettisonMappedXmlDriver klasse for at oprette en instans.

xstream = ny XStream (ny JettisonMappedXmlDriver ()); dataJson = xstream.toXML (kunde);

Dette genererer følgende JSON:

{"com.baeldung.pojo.Customer": {"firstName": "John", "lastName": "Doe", "dob": "1986-02-14 16: 25: 50.745 UTC", "age": 30, "contactDetailsList": [{"com.baeldung.pojo.ContactDetails": [{"mobile": 6673543265, "fastnet": "0124-2460311"}, {"mobile": 4676543565, "fastnet": "0120 -223312 "}]}]}}

5.3. Analyse

Baseret på output fra de to drivere kan vi tydeligt se, at der er nogle små forskelle i den genererede JSON. For eksempel, JettisonMappedXmlDriver udelader de dobbelte anførselstegn for numeriske værdier, til trods for at datatypen er java.lang.Streng:

"mobil": 4676543565, "alder": 30,

JsonHierarchicalStreamDriverpå den anden side bevarer de dobbelte citater.

6. Deserialisering af JSON til et objekt

Lad os tage følgende JSON for at konvertere den tilbage til en Kunde objekt:

{"customer": {"firstName": "John", "lastName": "Doe", "dob": "1986-02-14 16: 41: 01.987 UTC", "age": 30, "contactDetailsList": [{"com.baeldung.pojo.ContactDetails": [{"mobile": 6673543265, "fastnet": "0124-2460311"}, {"mobile": 4676543565, "fastnet": "0120-223312"}]} ]}}

Husk at kun en af ​​driverne (JettisonMappedXMLDriver) kan deserialisere JSON. Forsøg på at brugeJsonHierarchicalStreamDriver til dette formål vil resultere i en Ikke-understøttetOperationException.

Ved hjælp af Jettison-chaufføren kan vi deserialisere Kunde objekt:

kunde = (kunde) xstream.fromXML (dataJson);

7. Konklusion

I denne artikel har vi dækket JSON-håndteringsfunktionerne XStream ved at konvertere objekter til og fra JSON. Vi kiggede også på, hvordan vi kan tilpasse vores JSON-output, hvilket gør det kortere, enklere og mere læsbart.

Som med XStreams XML-behandling er der andre måder, hvorpå vi yderligere kan tilpasse den måde, JSON serialiseres ved at konfigurere forekomsten ved hjælp af enten annoteringer eller programmatisk konfiguration. For flere detaljer og eksempler henvises til den første artikel i denne serie.

Den komplette kildekode med eksempler kan downloades fra det linkede GitHub-lager.


$config[zx-auto] not found$config[zx-overlay] not found