Vue d'ensemble du pointeur JSON

1. Aperçu

Dans ce didacticiel, nous montrerons comment utiliser le pointeur JSON pour naviguer et récupérer des informations à partir de données JSON .

Nous montrerons également comment effectuer des opérations telles que l'insertion de nouvelles données ou la mise à jour des valeurs-clés existantes.

2. Configuration des dépendances

Tout d'abord, nous devons ajouter des dépendances à notre pom.xml :

 org.glassfish javax.json 1.1.2 

3. Pointeur JSON

JSON («JavaScript Object Notation») est un format léger pour l'échange de données entre systèmes, initialement spécifié par Douglas Crockford.

Bien qu'il utilise la syntaxe JavaScript , il est indépendant du langage, car le résultat est du texte brut .

Le pointeur JSON (RFC 6901) est une fonctionnalité de l'API JSON Processing 1.1 (JSR 374). Il définit une chaîne qui peut être utilisée pour accéder aux valeurs d'un document JSON. Cela peut être lié à ce que XPath fait pour un document XML.

Grâce à l'utilisation de JSON Pointer, nous pouvons récupérer des données et modifier un fichier JSON.

4. Accès aux données

Nous verrons quelques exemples de la façon d'effectuer des opérations en implémentant une classe appelée JsonPointerCrud .

Supposons que nous ayons un fichier JSON appelé books.json avec le contenu:

{ "library": "My Personal Library", "books": [ { "title":"Title 1", "author":"Jane Doe" }, { "title":"Title 2", "author":"John Doe" } ] }

Pour accéder aux données de ce fichier, nous devons le lire et l'analyser en JsonStructure . Nous pouvons y parvenir en utilisant la méthode Json.createReader () , qui accepte un InputStream ou un FileReader .

Voici comment nous pouvons faire cela:

JsonReader reader = Json.createReader(new FileReader("books.json")); JsonStructure jsonStructure = reader.read(); reader.close();

Le contenu sera stocké sur un objet JsonStructure . C'est l'objet que nous utiliserons pour effectuer les prochaines opérations.

4.1. Récupérer les données du fichier

Pour récupérer une seule valeur, nous créons un JsonPointer , indiquant de quelle balise nous voulons obtenir la valeur:

JsonPointer jsonPointer = Json.createPointer("/library"); JsonString jsonString = (JsonString) jsonPointer.getValue(jsonStructure); System.out.println(jsonString.getString());

Notez que le premier caractère de cette chaîne est un « - c'est une exigence syntaxique .

Le résultat de cet extrait est:

My Personal Library

Pour récupérer une valeur dans une liste, nous devons spécifier son index (où le premier index est 0):

JsonPointer jsonPointer = Json.createPointer("/books/1"); JsonObject jsonObject = (JsonObject) jsonPointer.getValue(jsonStructure); System.out.println(jsonObject.toString());

Cela produit:

"title":"Title 2", "author":"John Doe"

4.2. Vérifier si une clé est présente dans le fichier

Grâce à la méthode containsValue , nous pouvons vérifier si la valeur utilisée pour créer le pointeur est présente sur le fichier JSON:

JsonPointer jsonPointer = Json.createPointer("/library"); boolean found = jsonPointer.containsValue(jsonStructure); System.out.println(found); 

Le résultat de cet extrait est:

true

4.3. Insérer une nouvelle valeur-clé

Si nous devons ajouter une nouvelle valeur au JSON, la createValue est celle qui la gère. La méthode createValue est surchargée pour accepter String , int , long , double , BigDecimal et BigInteger:

JsonPointer jsonPointer = Json.createPointer("/total"); JsonNumber jsonNumber = Json.createValue(2); jsonStructure = jsonPointer.add(jsonStructure, jsonNumber); System.out.println(jsonStructure);

Encore une fois, notre résultat est:

{ "library": "My Personal Library", "total": 2, "books": [ { "title":"Title 1", "author":"Jane Doe" }, { "title":"Title 2", "author":"John Doe" } ] }

4.4. Mettre à jour une valeur-clé

Pour mettre à jour une valeur, nous devons d'abord créer la nouvelle valeur . Une fois la valeur créée, nous utilisons la méthode replace à partir du pointeur créé à l'aide du paramètre clé:

JsonPointer jsonPointer = Json.createPointer("/total"); JsonNumber jsonNumberNewValue = Json.createValue(5); jsonStructure = jsonPointer.replace(jsonStructure, jsonNumberNewValue); System.out.println(jsonStructure);

Sortie:

{ "library": "My Personal Library", "total": 5, "books": [ { "title":"Title 1", "author":"Jane Doe" }, { "title":"Title 2", "author":"John Doe" } ] }

4.5. Supprimer une clé

Pour supprimer une clé, nous créons d'abord un pointeur vers la clé. Nous utilisons ensuite la méthode remove:

JsonPointer jsonPointer = Json.createPointer("/library"); jsonPointer.getValue(jsonStructure); jsonStructure = jsonPointer.remove(jsonStructure); System.out.println(jsonStructure);

Résultant en:

{ "total": 5, "books": [ { "title":"Title 1", "author":"Jane Doe" }, { "title":"Title 2", "author":"John Doe" } ] }

4.6. Afficher le contenu complet du fichier

Si le pointeur est créé avec une chaîne vide , tout le contenu est récupéré:

JsonPointer jsonPointer = Json.createPointer(""); JsonObject jsonObject = (JsonObject) jsonPointer.getValue(jsonStructure); System.out.println(jsonObject.toString());

Cet exemple de code afficherait tout le contenu de jsonStructure .

5. Conclusion

Dans cet article rapide, nous avons expliqué comment utiliser le pointeur JSON pour effectuer diverses opérations sur les données JSON.

Et, comme d'habitude, le code lié à ce tutoriel est terminé sur GitHub.