Guide de l’utilisateur XStream: JSON

XStream User Guide: 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 dansconverting Java objects to XML etvice versa, veuillez vous référer aux articles précédents.

Au-delà de ses capacités de traitement XML, XStream peut également convertir des objets Java en JSON. Dans ce tutoriel, nous allons en apprendre davantage sur ces fonctionnalités.

2. Conditions préalables

Avant de lire ce tutoriel, veuillez passer par le lien: / xstream-serialize-object-to-xml, dans lequel nous expliquons les bases de la bibliothèque.

3. Les 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, il existe deux pilotes disponibles pour convertir des objets vers et depuis JSON:JsonHierarchicalStreamDriver etJettisonMappedXmlDriver.

4.1. JsonHierarchicalStreamDriver

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

4.2. JettisonMappedXmlDriver

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


    org.codehaus.jettison
    jettison
    1.3.7

5. Sérialisation d'un objet en JSON

Créons une classeCustomer:

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 en tant queString. Nous expliquerons ce choix plus tard.

5.1. Utilisation deJsonHierarchicalStreamDriver

Nous passerons unJsonHierarchicalStreamDriver pour créer une instance XStream.

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

Cela génère le JSON suivant:

{
  "com.example.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 deJettisonMappedXmlDriver

Nous passerons une classeJettisonMappedXmlDriver pour créer une instance.

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

Cela génère le JSON suivant:

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

5.3. Une analyse

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

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

JsonHierarchicalStreamDriver, d'autre part, conserve les guillemets doubles. __

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

Prenons le JSON suivant pour le reconvertir en objetCustomer:

{
  "customer": {
    "firstName": "John",
    "lastName": "Doe",
    "dob": "1986-02-14 16:41:01.987 UTC",
    "age": 30,
    "contactDetailsList": [
      {
        "com.example.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. Tenter d'utiliser_ _JsonHierarchicalStreamDriver à cette fin entraînera unUnsupportedOperationException.

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

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

7. Conclusion

Dans cet article, nous avons abordé les fonctionnalités de gestion JSON XStream, en convertissant des objets en JSON. Nous avons également cherché à modifier notre sortie JSON en 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, reportez-vous auxfirst article in this series.

Le code source complet avec des exemples peut être téléchargé à partir deslinked GitHub repository.