Guide de l'utilisateur XStream: JSON

1. Vue d'ensemble

Ceci est le troisième article d'une série sur XStream. Si vous souhaitez en savoir plus sur son utilisation de base dans la conversion d'objets Java en XML et vice versa, veuillez vous référer aux articles précédents.

Au-delà de ses capacités de gestion XML, XStream peut également convertir des objets Java vers et depuis JSON. Dans ce didacticiel, nous allons découvrir ces fonctionnalités.

2. Prérequis

Avant de lire ce tutoriel, veuillez parcourir le premier article de cette série , dans lequel nous expliquons les bases de la bibliothèque.

3. Dépendances

 com.thoughtworks.xstream xstream 1.4.5 

4. Pilotes JSON

Dans les articles précédents, nous avons appris à configurer une instance XStream et à sélectionner un pilote XML. De même, deux pilotes sont disponibles pour convertir des objets vers et depuis JSON: JsonHierarchicalStreamDriver et JettisonMappedXmlDriver .

4.1. JsonHierarchicalStreamDriver

Cette classe de pilote peut sérialiser des objets en JSON, mais n'est pas capable de la désérialiser en objets. Il ne nécessite aucune dépendance supplémentaire et sa classe de pilote est autonome.

4.2. JettisonMappedXmlDriver

Cette classe de pilote est capable de convertir JSON vers et à partir d'objets. En utilisant cette classe de pilote, nous devons ajouter une dépendance supplémentaire pour le jettison .

 org.codehaus.jettison jettison 1.3.7 

5. Sérialisation d'un objet en JSON

Créons une classe Customer :

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

Notez que nous avons (peut-être de manière inattendue) créé age sous forme de chaîne . Nous expliquerons ce choix plus tard.

5.1. Utilisation de JsonHierarchicalStreamDriver

Nous passerons un JsonHierarchicalStreamDriver pour créer une instance XStream.

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

Cela génère le JSON suivant:

{ "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. Implémentation de JettisonMappedXmlDriver

Nous passerons une classe JettisonMappedXmlDriver pour créer une instance.

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

Cela génère le JSON suivant:

{ "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. Une analyse

Sur la base de la sortie des deux pilotes, nous pouvons clairement voir qu'il existe de légères différences dans le JSON généré. Par exemple, JettisonMappedXmlDriver omet les guillemets pour les valeurs numériques bien que le type de données soit java.lang.String :

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

JsonHierarchicalStreamDriver , en revanche, conserve les guillemets doubles.

6. Désérialisation de JSON en un objet

Prenons le JSON suivant pour le reconvertir en objet 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" } ] } ] } }

Rappelez-vous qu'un seul des pilotes ( JettisonMappedXMLDriver ) peut désérialiser JSON. Tentative d'utilisationJsonHierarchicalStreamDriver à cet effet se traduira par une UnsupportedOperationException .

En utilisant le pilote Jettison, nous pouvons désérialiser l' objet Customer :

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

7. Conclusion

Dans cet article, nous avons couvert les capacités de gestion JSON XStream, la conversion d'objets vers et depuis JSON. Nous avons également examiné comment nous pouvons modifier notre sortie JSON, la rendant plus courte, plus simple et plus lisible.

Comme pour le traitement XML de XStream, il existe d'autres moyens de personnaliser davantage la façon dont JSON est sérialisé en configurant l'instance, à l'aide d'annotations ou de configuration par programme. Pour plus de détails et d'exemples, veuillez consulter le premier article de cette série.

Le code source complet avec des exemples peut être téléchargé à partir du référentiel GitHub lié.