Überblick über den JSON-Zeiger

Überblick über JSON Pointer

1. Overview

In diesem Tutorial werdenwe’ll show how to use JSON Pointer to navigate and fetch information from JSON data.

Wir zeigen auch, wie Sie Vorgänge wie das Einfügen neuer Daten oder das Aktualisieren vorhandener Schlüsselwerte ausführen.

2. Abhängigkeits-Setup

Zuerst müssen wir unserenpom.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 die Syntax vonJavaScriptverwendet wird, wirdit’s language-independent, since the resultant is plain text verwendet.

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

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

4. Zugriff auf Daten

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

Nehmen wir an, wir haben eine JSON-Datei namensbooks.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 inJsonStructure analysieren. Wir können dies mit der MethodeJson.createReader()erreichen, dieInputStream oderFileReader 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 einemJsonStructure-Objekt gespeichert. Dies ist das Objekt, mit dem wir die nächsten Vorgänge ausführen.

4.1. Daten aus der Datei abrufen

Um einen einzelnen Wert abzurufen, erstellen wir einJsonPointer, das angibt, 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, dassthe first character of thisStringis a ‘/' * - dies ist eine syntaktische Anforderung *.

Das Ergebnis dieses Snippets ist:

My Personal Library

Um einen Wert aus einer Liste abzurufen, müssen wir 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 in der Datei ein Schlüssel vorhanden ist

Mit der MethodecontainsValue 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, istcreateValue derjenige, der damit umgeht. 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);

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

To update a value we need to create the new value first. Nachdem der Wert erstellt wurde, verwenden wir diereplace-Methode 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 einem leerenString 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 vonjsonStructure ausgeben.

5. Fazit

In diesem kurzen Artikel wird erläutert, wie Sie mit JSON Pointer verschiedene Vorgänge für JSON-Daten ausführen.

Und wie üblich lautet der Code für dieses Tutorialover on GitHub.