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: JsonHierarchicalStreamDriverderimot beholder de doble anførselstegnene. La oss ta følgende JSON for å konvertere den tilbake til en Kunde gjenstand: 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: 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."mobil": 4676543565, "alder": 30,
6. Deserialisere JSON til et objekt
{"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"}]} ]}}
kunde = (kunde) xstream.fromXML (dataJson);
7. Konklusjon