Vue d’ensemble du pointeur JSON

Vue d'ensemble du pointeur JSON

1. Overview

Dans ce didacticiel,we’ll show how to use JSON Pointer to navigate and fetch information from JSON data.

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

2. Configuration des dépendances

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


    org.glassfish
    javax.json
    1.1.2

3. Pointeur JSON

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

Bien qu'il utilise la syntaxeJavaScript,it’s language-independent, since the resultant is plain text.

Le pointeur JSON (RFC 6901) est une fonctionnalité de l'API JSON Processing 1.1 (JSR 374). Il définit unString qui peut être utilisé 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éder aux données

Nous allons voir quelques exemples de la façon d'effectuer des opérations en implémentant une classe appeléeJsonPointerCrud.

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 unJsonStructure. Nous pouvons y parvenir en utilisant la méthodeJson.createReader(), qui accepte unInputStream ou unFileReader.

Voici comment nous pouvons y parvenir:

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

Le contenu sera stocké sur un objetJsonStructure. 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 unJsonPointer, 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 quethe first character of thisStringis a ‘/' * - 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 génère:

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

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

Grâce à la méthodecontainsValue, 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 le suivant:

true

4.3. Insérer une nouvelle valeur-clé

Si nous devons ajouter une nouvelle valeur au JSON, lecreateValue est celui qui le gère. The method createValue is overloaded to accept String, int, long, double, BigDecimal and BigInteger:

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

Encore une fois, notre sortie 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é

To update a value we need to create the new value first. Une fois la valeur créée, nous utilisons la méthodereplace 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 sur 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 unString 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 desjsonStructure.

5. Conclusion

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

Et, comme d'habitude, le code lié à ce tutoriel estover on GitHub.