JSONポインタの概要

1. 概要

このチュートリアルでは、** JSONポインタを使用してJSONデータから情報をナビゲートおよび取得する方法を説明します。

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

2依存関係の設定

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

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.json</artifactId>
    <version>1.1.2</version>
</dependency>

3 JSONポインタ

JSON (“ JavaScript Object Notation”)は、もともとDouglas Crockfordによって指定された、システム間でデータを交換するための軽量形式です。

これは JavaScript 構文を使用していますが、 結果はプレーンテキスト なので、言語に依存しません。

JSONポインタ(https://tools.ietf.org/html/rfc6901[RFC 6901])は、JSON Processing 1.1 API(https://jcp.org/en/jsr/detail?id=374[JSR 374]の機能です。])。 JSONドキュメントの値にアクセスするために使用できる String を定義します。それは、XPathがXML文書に対して行うことに関連している可能性があります。

JSON Pointerを使用して、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());
  • この String の最初の文字は ' _/' _ です - これは構文上の要件です** 。

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

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 がそれを処理するためのものです。メソッド createValue は、 String int long double BigDecimal 、および__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を更新する

  • 値を更新するには、まず新しい値を作成する必要があります** 。値が作成されたら、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ポインターを使用してJSONデータに対してさまざまな操作を実行する方法について説明しました。

そして、いつもどおり、このチュートリアルに関連するコードはhttps://github.com/eugenp/tutorials/tree/master/json[over on GitHub]です。