XStream-gebruikershandleiding: JSON

1. Overzicht

Dit is het derde artikel in een serie over XStream. Raadpleeg de voorgaande artikelen als u meer wilt weten over het basisgebruik ervan bij het converteren van Java-objecten naar XML en vice versa.

Naast de XML-afhandelingsmogelijkheden, kan XStream ook Java-objecten van en naar JSON converteren. In deze tutorial leren we over deze functies.

2. Vereisten

Lees het eerste artikel in deze serie voordat u deze tutorial leest, waarin we de basis van de bibliotheek uitleggen.

3. Afhankelijkheden

 com.thoughtworks.xstream xstream 1.4.5 

4. JSON-stuurprogramma's

In de vorige artikelen hebben we geleerd hoe u een XStream-instantie instelt en een XML-stuurprogramma selecteert. Evenzo zijn er twee stuurprogramma's beschikbaar om objecten van en naar JSON te converteren: JsonHierarchicalStreamDriver en JettisonMappedXmlDriver.

4.1. JsonHierarchicalStreamDriver

Deze stuurprogrammaklasse kan objecten serialiseren naar JSON, maar is niet in staat om terug te deserialiseren naar objecten. Het vereist geen extra afhankelijkheden en de stuurprogrammaklasse is op zichzelf staand.

4.2. JettisonMappedXmlDriver

Deze stuurprogrammaklasse kan JSON van en naar objecten converteren. Met behulp van deze stuurprogrammaklasse moeten we een extra afhankelijkheid toevoegen voor overboord gooien.

 org.codehaus.jettison overboord gegooid 1.3.7 

5. Serialiseren van een object naar JSON

Laten we een Klant klasse:

openbare klasse Klant {private String firstName; private String achternaam; privé Datum dob; privé String-leeftijd; privélijst contactDetailsList; // getters en setters}

Merk op dat we (misschien onverwacht) hebben gemaakt leeftijd als een Draad. We zullen deze keuze later toelichten.

5.1. Gebruik makend van JsonHierarchicalStreamDriver

We passeren een JsonHierarchicalStreamDriver om een ​​XStream-instantie te maken.

xstream = nieuwe XStream (nieuwe JsonHierarchicalStreamDriver ()); dataJson = xstream.toXML (klant);

Dit genereert de volgende JSON:

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

5.2. JettisonMappedXmlDriver Implementatie

We passeren een JettisonMappedXmlDriver class om een ​​instantie te maken.

xstream = nieuwe XStream (nieuwe JettisonMappedXmlDriver ()); dataJson = xstream.toXML (klant);

Dit genereert de volgende 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, "vaste lijn": "0124-2460311"}, {"mobile": 4676543565, "vaste lijn": "0120 -223312 "}]}]}}

5.3. Analyse

Op basis van de uitvoer van de twee stuurprogramma's kunnen we duidelijk zien dat er enkele kleine verschillen zijn in de gegenereerde JSON. Bijvoorbeeld, JettisonMappedXmlDriver laat de dubbele aanhalingstekens voor numerieke waarden weg, ondanks dat het gegevenstype java.lang.String:

"mobile": 4676543565, "age": 30,

JsonHierarchicalStreamDriver, aan de andere kant, behoudt de dubbele aanhalingstekens.

6. JSON deserialiseren naar een object

Laten we de volgende JSON nemen om het terug te converteren naar een Klant voorwerp:

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

Bedenk dat slechts een van de stuurprogramma's (JettisonMappedXMLDriver) kan JSON deserialiseren. Probeert te gebruikenJsonHierarchicalStreamDriver voor dit doel zal resulteren in een UnsupportedOperationException.

Met behulp van de Jettison-driver kunnen we de Klant voorwerp:

customer = (Klant) xstream.fromXML (dataJson);

7. Conclusie

In dit artikel hebben we de JSON-afhandelingsmogelijkheden XStream behandeld, het converteren van objecten van en naar JSON. We hebben ook gekeken hoe we onze JSON-uitvoer kunnen aanpassen, zodat deze korter, eenvoudiger en beter leesbaar wordt.

Net als bij de XML-verwerking van XStream, zijn er andere manieren waarop we de manier waarop JSON wordt geserialiseerd verder kunnen aanpassen door de instantie te configureren met behulp van annotaties of programmatische configuratie. Raadpleeg het eerste artikel in deze serie voor meer details en voorbeelden.

De volledige broncode met voorbeelden kan worden gedownload vanuit de gekoppelde GitHub-repository.