Guida per l'utente XStream: JSON

1. Panoramica

Questo è il terzo articolo di una serie su XStream. Se vuoi conoscere il suo utilizzo di base nella conversione di oggetti Java in XML e viceversa, fai riferimento agli articoli precedenti.

Oltre alle sue capacità di gestione XML, XStream può anche convertire oggetti Java da e verso JSON. In questo tutorial impareremo a conoscere queste funzionalità.

2. Prerequisiti

Prima di leggere questo tutorial, leggi il primo articolo di questa serie , in cui spieghiamo le basi della libreria.

3. Dipendenze

 com.thoughtworks.xstream xstream 1.4.5 

4. Driver JSON

Negli articoli precedenti abbiamo appreso come configurare un'istanza XStream e selezionare un driver XML. Allo stesso modo, sono disponibili due driver per convertire oggetti in e da JSON: JsonHierarchicalStreamDriver e JettisonMappedXmlDriver .

4.1. JsonHierarchicalStreamDriver

Questa classe driver può serializzare oggetti in JSON, ma non è in grado di deserializzare di nuovo in oggetti. Non richiede dipendenze aggiuntive e la sua classe driver è autonoma.

4.2. JettisonMappedXmlDriver

Questa classe driver è in grado di convertire JSON da e verso oggetti. Usando questa classe di driver, dobbiamo aggiungere una dipendenza extra per il jettison .

 org.codehaus.jettison jettison 1.3.7 

5. Serializzazione di un oggetto in JSON

Creiamo una classe cliente :

public class Customer { private String firstName; private String lastName; private Date dob; private String age; private List contactDetailsList; // getters and setters }

Nota che abbiamo (forse inaspettatamente) creato l' età come una stringa . Spiegheremo questa scelta più avanti.

5.1. Utilizzando JsonHierarchicalStreamDriver

Passeremo un JsonHierarchicalStreamDriver per creare un'istanza XStream.

xstream = new XStream(new JsonHierarchicalStreamDriver()); dataJson = xstream.toXML(customer);

Questo genera il seguente JSON:

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

5.2. Implementazione di JettisonMappedXmlDriver

Passeremo una classe JettisonMappedXmlDriver per creare un'istanza.

xstream = new XStream(new JettisonMappedXmlDriver()); dataJson = xstream.toXML(customer);

Questo genera il seguente 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, "landline": "0124-2460311" }, { "mobile": 4676543565, "landline": "0120-223312" } ] } ] } }

5.3. Analisi

Sulla base dell'output dei due driver, possiamo vedere chiaramente che ci sono alcune lievi differenze nel JSON generato. Ad esempio, JettisonMappedXmlDriver omette le virgolette doppie per i valori numerici nonostante il tipo di dati sia java.lang.String :

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

JsonHierarchicalStreamDriver , d'altra parte, mantiene le virgolette doppie.

6. Deserializzazione di JSON in un oggetto

Prendiamo il seguente JSON per riconvertirlo in un oggetto Customer :

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

Ricorda che solo uno dei driver ( JettisonMappedXMLDriver ) può deserializzare JSON. Tentativo di utilizzareJsonHierarchicalStreamDriver per questo scopo genererà un'eccezione UnsupportedOperationException .

Utilizzando il driver Jettison, possiamo deserializzare l' oggetto Cliente :

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

7. Conclusione

In questo articolo abbiamo trattato le capacità di gestione JSON XStream, convertendo oggetti da e verso JSON. Abbiamo anche esaminato come modificare il nostro output JSON, rendendolo più breve, più semplice e più leggibile.

Come con l'elaborazione XML di XStream, esistono altri modi per personalizzare ulteriormente il modo in cui viene serializzato JSON configurando l'istanza, utilizzando annotazioni o configurazione programmatica. Per maggiori dettagli ed esempi, fare riferimento al primo articolo di questa serie.

Il codice sorgente completo con esempi può essere scaricato dal repository GitHub collegato.