JavaでJsonPointerインターフェースを使用してJSONのキーの値を取得する方法
JSONPointerは、JSONドキュメント内の特定のキーの値へアクセスするための文字列構文を定義した標準規格です。Jsonクラスの静的ファクトリメソッドであるcreatePointer()を呼び出すことで、JSONPointerのインスタンスを生成できます。JSONPointerでは、すべての文字列構文がスラッシュ「/」で始まるのが特徴です。キーの値を取得するには、JSONPointerオブジェクトに対してgetValue()メソッドを呼び出します。
前提条件
この記事のコードを実行するには、Java EE / Jakarta EEに含まれるJSON Processing(JSON-P)のAPIが必要です。Mavenプロジェクトの場合は、pom.xmlに以下の依存関係を追加してください。
<dependency>
<groupId>javax.json</groupId>
<artifactId>javax.json-api</artifactId>
<version>1.1.4</version>
</dependency>
使用するJSONファイル
今回の例では、次のような「simple.json」ファイルを使用します。

{
"firstName": "Raja",
"lastName": "Ramesh",
"age": 30,
"streetAddress": "Madhapur",
"city": "Hyderabad",
"state": "Telangana",
"phoneNumbers": [
{ "Mobile": "9959984000" },
{ "Home": "0403758000" }
]
}
コード例
import javax.json.*;
import java.io.*;
public class JsonPointerTest {
public static void main(String[] args) throws Exception {
JsonReader jsonReader = Json.createReader(new FileReader("simple.json"));
JsonStructure jsonStructure = jsonReader.read();
// 単一のキーの値を取得
JsonPointer jsonPointer1 = Json.createPointer("/firstName");
JsonString jsonString = (JsonString) jsonPointer1.getValue(jsonStructure);
System.out.println("First Name: " + jsonString.getString());
// 配列全体を取得
JsonPointer jsonPointer2 = Json.createPointer("/phoneNumbers");
JsonArray array = (JsonArray) jsonPointer2.getValue(jsonStructure);
System.out.println("Phone Numbers:");
for (JsonValue value : array) {
JsonObject objValue = (JsonObject) value;
System.out.println(objValue.toString());
}
// 配列の要素をインデックスで取得
JsonPointer jsonPointer3 = Json.createPointer("/phoneNumbers/1");
JsonObject jsonObject1 = (JsonObject) jsonPointer3.getValue(jsonStructure);
System.out.println("Home: " + jsonObject1.toString());
// 空のポインタでドキュメント全体を取得
JsonPointer jsonPointer4 = Json.createPointer("");
JsonObject jsonObject2 = (JsonObject) jsonPointer4.getValue(jsonStructure);
System.out.println("JSON:\n" + jsonObject2.toString());
jsonReader.close();
}
}
実行結果
First Name: Raja
Phone Numbers:
{"Mobile":"9959984000"}
{"Home":"0403758000"}
Home: {"Home":"0403758000"}
JSON:
{"firstName":"Raja","lastName":"Ramesh","age":30,"streetAddress":"Madhapur","city":"Hyderabad","state":"Telangana","phoneNumbers":[{"Mobile":"9959984000"},{"Home":"0403758000"}]}
ポイント解説
- ポインタの作成:
Json.createPointer("/firstName")のように、先頭に「/」を付けたパス形式の文字列を指定してJSONPointerを生成します。 - 配列要素へのアクセス:「/phoneNumbers/1」のように、配列名の後に0始まりのインデックスを指定することで、特定の要素を直接取得できます。
- ドキュメント全体の取得:
createPointer("")のように空文字列を渡すと、ルート(JSONドキュメント全体)を参照できます。 - 例外への注意:存在しないパスを指定すると
JsonExceptionがスローされるため、実際のアプリケーションでは適切な例外処理を組み合わせることをおすすめします。
-
OpenCVのJavaライブラリで画像のキーポイント(特徴点)を検出する方法
OpenCVのorg.opencv.features2d.Feature2D(抽象クラス)が提供するdetect()メソッドを使用すると、指定した画像からキーポイント(特徴点)を検出できます。このメソッドを呼び出す際は、元画像を表すMatオブジェクトと、検出結果を格納するための空のMatOfKeyPointオブジェクトを引数として渡します。 また、検出されたキーポイントを画像上に描画したい場合は、org.opencv.features2d.Features2dクラスのdrawKeypoints()メソッドを利用します。 注意点 Feature2Dは抽象クラスであるため、detect()メソ
-
【Java入門】Gsonライブラリを使ってJSON文字列をファイルに書き込む方法
GsonライブラリとはGsonは、JavaオブジェクトをJSON形式に変換(シリアライズ)するためのGoogle製オープンソースライブラリです。逆に、JSON文字列からJavaオブジェクトへの変換(デシリアライズ)も簡単に行えるため、JavaでJSONを扱う際の定番ライブラリとして広く利用されています。Gsonを使用する際の中心的なクラスはGsonクラスです。インスタンスはnew Gson()のように直接生成できますが、設定をカスタマイズしたい場合はGsonBuilderクラスを使ってGsonインスタンスを作成することも可能です。この記事では、Gsonクラスが提供するtoJson()メソッドを