BT
x Votre opinion compte ! Merci de bien vouloir répondre au sondage InfoQ concernant vos habitudes de lecture !

Une API Java Standard pour JSON

par Bienvenido David III , traduit par Julien Vey le 29 mai 2013 |

La JSR-353, l'API Java pour le traitement JSON (JSON-P), a atteint l'approbation finale ce mois-ci. JSON-P (semblable à JAXP) se compose d'une API de streaming (semblable à StAX) et de l'API "Object Model" (similaire au DOM). L'implémentation de référence est jsonp, actuellement en version bêta, et open source sous CDDL v1.1 et GPL v2. JSON-P fera partie du prochain Java EE 7, et sera utilisé par JAX-RS en tant qu'implémentation JSON par défaut. Il est important de noter que cette API ne comprend pas le databinding JSON (semblable à JAXB), et n'est pas lié au plus populaire JSONP ou «JSON with padding".

JSON (JavaScript Object Notation) est un format d'échange de données léger, et est utilisé dans les applications Web, les services REST et les bases de données NoSQL. Avec la popularité de JSON, et l'arrivée de nombreuses bibliothèques JSON pour la plate-forme Java (org.json, Jackson, google-gson, etc), il est maintenant nécessaire de normaliser la façon dont les développeurs créent et consomment du JSON. JSON-P est le standard à venir, et peut être utilisé de façon autonome, ou en tant que partie de conteneurs Java EE 7.

JSON-P est divisé en deux API, l'API streaming (javax.json.stream), et l'API "Object Model" (javax.json). L'API de streaming est un moyen de bas niveau et efficace pour analyser et générer du JSON. Elle se compose de deux abstractions, JsonParser et JsonGenerator. JsonParser est un parseur qui permet un accès en lecture seule à une source de données JSON. JsonGenerator fournit des méthodes pour écrire du JSON dans un flux, et permet le chaînage de méthode. Le générateur écrit les paires nom/valeur dans des objets JSON et les valeurs dans des tableaux JSON.

Voici des exemples de code de JsonParser et JsonGenerator. Tout d'abord les données JSON que nous allons lire ou écrire.

[
  {
    "type" : "home",
    "number" : "(800) 111-1111"
  },
    {
    "type" : "cell",
    "number" : "(800) 222-2222"
    }
]

Nous avons ici l'exemple de JsonParser, avec sa sortie en bas.

JsonParserFactory factory = Json.createParserFactory(null);
JsonParser parser = factory.createParser(new StringReader(json));

while (parser.hasNext()) {
  Event event = parser.next();

  switch (event) {
    case KEY_NAME: {
      System.out.print(parser.getString() + "="); break;
    }
    case VALUE_STRING: {
      System.out.println(parser.getString()); break;
    }
  }
}

type=home
number=(800) 111-1111
type=cell
number=(800) 222-2222

Nous avons ici l'exemple de JsonGenerator, qui imprime le JSON dans System.out.

JsonGeneratorFactory factory = Json.createGeneratorFactory(null);
JsonGenerator generator = factory.createGenerator(System.out);

generator.writeStartArray().
  writeStartObject().
    write("type", "home").
    write("number", "(800) 111-1111").writeEnd().
  writeStartObject().
    write("type", "cell").
    write("number", "(800) 222-2222").writeEnd().
  writeEnd().close();

Le prochain exemple est l'API "Object Model", qui est une API de haut niveau, simple et facile à utiliser, mise en place par dessus l'API Streaming. Cette API crée une structure arborescente qui représente les données JSON en mémoire, qui peut être facilement naviguée et interrogée. Les principales abstractions de l'API "Object Model" sont JsonObject et JsonArray et sont toutes les deux immuables. JsonObject fournit une Map pour accéder à la collection non ordonnée des paires nom/valeur du modèle. JsonArray nous offre une Liste pour accéder à la séquence ordonnée de valeurs. Pour créer ces modèles d'objet, vous pouvez utiliser le pattern Builder (JsonObjectBuilder et JsonArrayBuilder) ou les lire à partir d'une source d'entrée (InputStream ou Reader) en utilisant JsonReader. Vous pouvez ensuite écrire ces modèles d'objets vers une sortie (OutputStream ou Writer) en utilisant le JsonWriter.

Voici un exemple de création de JsonArray utilisant JsonArrayBuilder. Encore une fois, nous travaillons avec les données JSON ci-dessus.

JsonBuilderFactory factory = Json.createBuilderFactory(null);
JsonArray jsonArray = factory.createArrayBuilder()
    .add(factory.createObjectBuilder().
        add("type", "home").
        add("number", "(800) 111-1111"))
    .add(factory.createObjectBuilder().
        add("type", "cell").
        add("number", "(800) 222-2222")).build();

Voici l'exemple pour JsonReader.

try (JsonReader jsonReader = Json.createReader(new StringReader(json))) {
  JsonArray array = jsonReader.readArray();
  System.out.println(array);
}

Voici l'exemple pour JsonWriter.

try (JsonWriter jsonWriter = Json.createWriter(System.out)) {
  jsonWriter.writeArray(jsonArray);
}

Pour essayer la version bêta, vous pouvez télécharger jsonp, ou utiliser les artifacts Maven javax.json:javax.json-api:1.0-b06 et org.glassfish:javax.json:1.0-B06. Vous aurez besoin de Java SE 6 ou supérieur. Pour plus d'informations, visitez le site offcial de l'API Java pour le traitement JSON, et lisez les Javadocs de traitement JSON. Vous pouvez également regarder la présentation de l'API Java pour le traitement JSON lors de JavaOne sur YouTube.

Bonjour étranger!

Vous devez créer un compte InfoQ ou cliquez sur pour déposer des commentaires. Mais il y a bien d'autres avantages à s'enregistrer.

Tirez le meilleur d'InfoQ

Donnez-nous votre avis

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet
Commentaires de la Communauté

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet

Discuter

Contenu Éducatif

Rien ne serait possible sans le soutien et la confiance de nos Sponsors Fondateurs:

AppDynamics   CloudBees   Microsoft   Zenika
Feedback Général
Bugs
Publicité
Éditorial
InfoQ.com et tous les contenus sont copyright © 2006-2014 C4Media Inc. InfoQ.com est hébergé chez Contegix, le meilleur ISP avec lequel nous ayons travaillé.
Politique de confidentialité
BT