Übersicht über JSON Pointer

1. Übersicht

In diesem Tutorial zeigen wir, wie Sie mit JSON Pointer navigieren und Informationen aus JSON-Daten abrufen .

Wir zeigen auch, wie Vorgänge wie das Einfügen neuer Daten oder das Aktualisieren vorhandener Schlüsselwerte ausgeführt werden.

2. Abhängigkeits-Setup

Zuerst müssen wir unserer pom.xml einige Abhängigkeiten hinzufügen :

 org.glassfish javax.json 1.1.2 

3. JSON-Zeiger

JSON („JavaScript Object Notation“) ist ein leichtes Format für den Datenaustausch zwischen Systemen, das ursprünglich von Douglas Crockford angegeben wurde.

Obwohl es die JavaScript- Syntax verwendet, ist es sprachunabhängig, da das Ergebnis einfacher Text ist .

JSON Pointer (RFC 6901) ist eine Funktion der JSON Processing 1.1 API (JSR 374). Es definiert eine Zeichenfolge , die für den Zugriff auf Werte in einem JSON-Dokument verwendet werden kann. Dies kann damit zusammenhängen, was XPath für ein XML-Dokument tut.

Mithilfe von JSON Pointer können wir Daten aus einer JSON-Datei abrufen und ändern.

4. Zugriff auf Daten

Wir werden einige Beispiele sehen, wie Operationen ausgeführt werden, indem eine Klasse namens JsonPointerCrud implementiert wird .

Nehmen wir an, wir haben eine JSON-Datei namens books.json mit dem Inhalt:

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

Um auf die Daten aus dieser Datei zuzugreifen, müssen wir sie lesen und in eine JsonStructure analysieren . Wir können dies mit der Methode Json.createReader () erreichen , die einen InputStream oder einen FileReader akzeptiert .

So können wir das machen:

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

Der Inhalt wird auf einem JsonStructure- Objekt gespeichert . Dies ist das Objekt, mit dem wir die nächsten Operationen ausführen.

4.1. Daten aus der Datei abrufen

Um einen einzelnen Wert abzurufen , erstellen wir einen JsonPointer , der darüber informiert, von welchem ​​Tag der Wert abgerufen werden soll:

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

Beachten Sie, dass das erste Zeichen dieses String ist ein ‚ /‘ - das ist eine syntaktische Anforderung .

Das Ergebnis dieses Snippets ist:

My Personal Library

Um einen Wert aus einer Liste abzurufen, müssen Sie seinen Index angeben (wobei der erste Index 0 ist):

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

Dies gibt aus:

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

4.2. Überprüfen Sie, ob ein Schlüssel in der Datei vorhanden ist

Mit der Methode includesValue können wir überprüfen, ob der zum Erstellen des Zeigers verwendete Wert in der JSON-Datei vorhanden ist:

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

Das Ergebnis für dieses Snippet ist:

true

4.3. Neuen Schlüsselwert einfügen

Wenn wir dem JSON einen neuen Wert hinzufügen müssen, ist der createValue derjenige , der damit umgeht . Die Methode createValue ist überladen, um String , int , long , double , BigDecimal und BigInteger zu akzeptieren :

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

Wieder ist unsere Ausgabe:

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

4.4. Aktualisieren Sie einen Schlüsselwert

Um einen Wert zu aktualisieren, müssen wir zuerst den neuen Wert erstellen . Nachdem der Wert erstellt wurde, verwenden wir die Ersetzungsmethode aus dem Zeiger, der mit dem Schlüsselparameter erstellt wurde:

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

Ausgabe:

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

4.5. Entfernen Sie einen Schlüssel

Um einen Schlüssel zu entfernen, erstellen wir zunächst einen Zeiger auf den Schlüssel. Wir verwenden dann die Methode remove:

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

Ergebend:

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

4.6. Zeigen Sie den vollständigen Inhalt der Datei an

Wenn der Zeiger mit einer leeren Zeichenfolge erstellt wird , wird der gesamte Inhalt abgerufen:

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

Dieses Codebeispiel würde den gesamten Inhalt der jsonStructure ausgeben .

5. Schlussfolgerung

In diesem kurzen Artikel haben wir erläutert, wie Sie mit JSON Pointer arbeiten, um verschiedene Vorgänge mit JSON-Daten auszuführen.

Und wie immer ist der Code für dieses Tutorial auf GitHub vorbei.