Korisnički vodič za XStream: JSON

1. Pregled

Ovo je treći članak u nizu o XStreamu. Ako želite saznati više o njegovoj osnovnoj uporabi u pretvaranju Java objekata u XML i obrnuto, pogledajte prethodne članke.

Osim mogućnosti upravljanja XML-om, XStream također može pretvoriti Java objekte u i iz JSON-a. U ovom uputstvu naučit ćemo o ovim značajkama.

2. Preduvjeti

Prije čitanja ovog vodiča, prođite kroz prvi članak ove serije, u kojem objašnjavamo osnove knjižnice.

3. Ovisnosti

 com.thoughtworks.xstream xstream 1.4.5 

4. JSON upravljački programi

U prethodnim člancima naučili smo kako postaviti instancu XStream i odabrati XML pokretački program. Slično tome, dostupna su dva pokretačka programa za pretvaranje objekata u i iz JSON-a: JsonHierarchicalStreamDriver i JettisonMappedXmlDriver.

4.1. JsonHierarchicalStreamDriver

Ova klasa upravljačkih programa može serializirati objekte u JSON, ali nije sposobna za deserializaciju natrag na objekte. Ne zahtijeva nikakve dodatne ovisnosti, a klasa vozača je samostalna.

4.2. JettisonMappedXmlDriver

Ova klasa upravljačkih programa može pretvoriti JSON u i iz objekata. Korištenjem ove klase upravljačkih programa moramo dodati dodatnu ovisnost za jetison.

 org.codehaus.jettison jettison 1.3.7 

5. Serijalizacija objekta na JSON-u

Stvorimo a Kupac razred:

kupac javne klase {private String firstName; private String lastName; privatno Datum dob; privatna gudačka dob; privatni popis contactDetailsList; // geteri i postavljači}

Imajte na umu da smo (možda neočekivano) stvorili dob kao Niz. Taj ćemo izbor objasniti kasnije.

5.1. Koristeći JsonHierarchicalStreamDriver

Proći ćemo a JsonHierarchicalStreamDriver za stvaranje instance XStream.

xstream = novi XStream (novi JsonHierarchicalStreamDriver ()); dataJson = xstream.toXML (kupac);

Ovo generira sljedeći JSON:

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

5.2. JettisonMappedXmlDriver Provedba

Proći ćemo a JettisonMappedXmlDriver klase za stvaranje instance.

xstream = novi XStream (novi JettisonMappedXmlDriver ()); dataJson = xstream.toXML (kupac);

Ovo generira sljedeći 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, "fiksni": "0124-2460311"}, {"mobile": 4676543565, "fiksni": "0120 -223312 "}]}]}}

5.3. Analiza

Na temelju rezultata dva pokretača, možemo jasno vidjeti da postoje neke male razlike u generiranom JSON-u. Na primjer, JettisonMappedXmlDriver izostavlja dvostruke navodnike za numeričke vrijednosti unatoč tome što je vrsta podataka java.lang.String:

"mobitel": 4676543565, "dob": 30,

JsonHierarchicalStreamDriver, s druge strane, zadržava dvostruke navodnike.

6. Deserijalizacija JSON-a na objekt

Uzmimo sljedeći JSON da ga pretvorimo natrag u Kupac objekt:

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

Sjetimo se da je samo jedan od vozača (JettisonMappedXMLDriver) može deserializirati JSON. Pokušaj korištenjaJsonHierarchicalStreamDriver u tu svrhu rezultirat će UnsupportedOperationException.

Pomoću upravljačkog programa Jettison možemo deserijalizirati Kupac objekt:

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

7. Zaključak

U ovom smo članku pokrili mogućnosti XStreama za rukovanje JSON-om, pretvarajući objekte u i iz JSON-a. Također smo pogledali kako možemo prilagoditi svoj JSON izlaz, čineći ga kraćim, jednostavnijim i čitljivijim.

Kao i kod XStreamove XML obrade, i na druge načine možemo dodatno prilagoditi način na koji je JSON serializiran konfiguriranjem instance, koristeći bilješke ili programsku konfiguraciju. Više pojedinosti i primjera potražite u prvom članku ove serije.

Cjeloviti izvorni kod s primjerima može se preuzeti s povezanog spremišta GitHub.


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