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]です。