JSONポインタの概要

JSONポインターの概要

1. Overview

このチュートリアルでは、we’ll show how to use JSON Pointer to navigate and fetch information from JSON data

また、新しいデータの挿入や既存のキー値の更新などの操作を実行する方法も示します。

2. 依存関係の設定

まず、pom.xmlにいくつかの依存関係を追加する必要があります。


    org.glassfish
    javax.json
    1.1.2

3. JSONポインター

JSON(「JavaScript Object Notation」)は、システム間でデータを交換するための軽量フォーマットであり、元々はDouglasCrockfordによって指定されました。

JavaScript構文を使用しますが、it’s language-independent, since the resultant is plain text

JSONポインター(RFC 6901)は、JSON Processing 1.1 API(JSR 374)の機能です。 JSONドキュメントの値にアクセスするために使用できるStringを定義します。 XPathがXMLドキュメントに対して行うことと関連している可能性があります。

JSONポインターを使用して、JSONファイルからデータを取得したり、JSONファイルを変更したりできます。

4. データへのアクセス

JsonPointerCrudというクラスを実装して操作を実行する方法の例をいくつか見ていきます。

次の内容のbooks.jsonというJSONファイルがあるとします。

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

そのファイルからデータにアクセスするには、データを読み取り、JsonStructureに解析する必要があります。 InputStreamまたはFileReaderを受け入れるJson.createReader()メソッドを使用してこれを実現できます。

その方法は次のとおりです。

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

コンテンツはJsonStructureオブジェクトに保存されます。 これは、次の操作を実行するために使用するオブジェクトです。

4.1. ファイルからデータをフェッチする

単一の値をフェッチするために、JsonPointerを作成し、値を取得するタグを通知します。

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

the first character of thisStringis a ‘/' * –これは構文上の要件*であることに注意してください。

このスニペットの結果は次のとおりです。

My Personal Library

リストから値を取得するには、そのインデックスを指定する必要があります(最初のインデックスは0です)。

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

これは出力します:

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

4.2. キーがファイルに存在するかどうかを確認します

メソッドcontainsValueを使用して、ポインターの作成に使用された値がJSONファイルに存在するかどうかを確認できます。

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

このスニペットの結果は次のとおりです。

true

4.3. 新しいKey-Valueを挿入

JSONに新しい値を追加する必要がある場合は、createValueがそれを処理します。 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);

繰り返しますが、出力は次のとおりです。

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

4.4. Key-Valueを更新する

To update a value we need to create the new value first。 値が作成された後、keyパラメーターを使用して作成されたポインターからreplaceメソッドを使用します。

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

出力:

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

4.5. キーを削除します

キーを削除するには、まずキーへのポインターを作成します。 次に、removeメソッドを使用します。

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

その結果:

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

4.6. ファイルの全内容を表示する

空のStringでポインタが作成された場合、コンテンツ全体が取得されます。

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

このコードサンプルは、jsonStructureの内容全体を出力します。

5. 結論

この簡単な記事では、JSON Pointerを使用してJSONデータに対してさまざまな操作を実行する方法について説明しました。

そして、いつものように、このチュートリアルに関連するコードはover on GitHubです。