XStream brukerhåndbok: JSON

1. Oversikt

Dette er den tredje artikkelen i en serie om XStream. Hvis du vil lære om grunnleggende bruk for konvertering av Java-objekter til XML og omvendt, kan du se de forrige artiklene.

Utover XML-håndteringsfunksjonene, kan XStream også konvertere Java-objekter til og fra JSON. I denne opplæringen vil vi lære om disse funksjonene.

2. Forutsetninger

Før du leser denne veiledningen, kan du gå gjennom den første artikkelen i denne serien, der vi forklarer det grunnleggende om biblioteket.

3. Avhengigheter

 com.thoughtworks.xstream xstream 1.4.5 

4. JSON-drivere

I de forrige artiklene lærte vi hvordan vi setter opp en XStream-forekomst og velger en XML-driver. På samme måte er det to drivere tilgjengelig for å konvertere objekter til og fra JSON: JsonHierarchicalStreamDriver og JettisonMappedXmlDriver.

4.1. JsonHierarchicalStreamDriver

Denne førerklassen kan serieobjekter til JSON, men er ikke i stand til å deserialisere tilbake til objekter. Det krever ingen ekstra avhengigheter, og førerklassen er selvstendig.

4.2. JettisonMappedXmlDriver

Denne førerklassen kan konvertere JSON til og fra objekter. Ved å bruke denne førerklassen, må vi legge til en ekstra avhengighet for jettison.

 org.codehaus.jettison jettison 1.3.7 

5. Serialisere et objekt til JSON

La oss lage en Kunde klasse:

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

Merk at vi (kanskje uventet) har opprettet alder som en String. Vi vil forklare dette valget senere.

5.1. Ved hjelp av JsonHierarchicalStreamDriver

Vi vil passere en JsonHierarchicalStreamDriver for å opprette 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", "fasttelefon": "0124-2460311"}, {"mobile": "4676543565", "fasttelefon": "0120-223312"}]} }

5.2. JettisonMappedXmlDriver Gjennomføring

Vi vil passere en JettisonMappedXmlDriver klasse for å opprette en forekomst.

xstream = nye XStream (nye 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, "fasttelefon": "0124-2460311"}, {"mobile": 4676543565, "fasttelefon": "0120 -223312 "}]}]}}

5.3. Analyse

Basert på utdataene fra de to driverne, kan vi tydelig se at det er noen små forskjeller i den genererte JSON. For eksempel, JettisonMappedXmlDriver utelater doble anførselstegn for numeriske verdier til tross for at datatypen er java.lang.Streng:

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

JsonHierarchicalStreamDriverderimot beholder de doble anførselstegnene.

6. Deserialisere JSON til et objekt

La oss ta følgende JSON for å konvertere den tilbake til en Kunde gjenstand:

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

Husk at bare en av driverne (JettisonMappedXMLDriver) kan deserialisere JSON. Forsøk på å brukeJsonHierarchicalStreamDriver for dette formålet vil resultere i en Ikke-støttetOperationException.

Ved hjelp av Jettison-sjåføren kan vi deserialisere Kunde gjenstand:

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

7. Konklusjon

I denne artikkelen har vi dekket JSON-håndteringsfunksjonene XStream, konvertering av objekter til og fra JSON. Vi så også på hvordan vi kan justere JSON-utgangen, noe som gjør den kortere, enklere og mer lesbar.

Som med XStreams XML-behandling, er det andre måter vi kan tilpasse ytterligere måten JSON serialiseres på ved å konfigurere forekomsten ved å bruke enten merknader eller programmatisk konfigurasjon. For mer informasjon og eksempler, se den første artikkelen i denne serien.

Den komplette kildekoden med eksempler kan lastes ned fra det koblede GitHub-depotet.


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