JSR 374: JSON処理のためのJava API (JSON-P)バージョン1.1のパブリックレビューが始まった。このバージョンはJ2EE 8 (訳者注:Java EEが正しい)のリリースに含まれ、JSON-PがJSON IETF 標準に沿うものとなるだろう。次のサポートを含む。
- JSONポインタ
- JSONパッチ
- JSONマージパッチ
- クエリと変換操作
- Java 8のストリームとラムダ
JSON-Pは2013年にJ2EE 7のリリースで導入された。GsonとJacksonの代わりとしてだ。標準JSON文書をパースし、生成し、クエリを発行するために設計された。
JSR-367: JSONバインディングのためのJava API (JSON-B)もまたJ2EE 8のリリースに含まれるだろう。JSON-BはJSON文書をJavaオブジェクトへバインドするために設計された。InfoQはJSON-Bのパブリックレビューを以前レポートした。
はじめの一歩
JSON-Pのパースとポインタのサンプルとして、次のようなJSONファイルを考えてみよう。
[
{
"publication":"New Vaadin Spring Release Introduces Enhanced View Management",
"publicationDate":"2016-12-30 00:00:00",
"author":"Michael Redlich",
"publicationType":"Article",
"publisher":"C4Media"
},
{
"publication":"Pivotal Releases First Milestone of Next-Generation Spring Data Featuring Reactive Database Access",
"publicationDate":"2017-01-19 00:00:00",
"author":"Michael Redlich",
"publicationType":"Article",
"publisher":"C4Media"
},
{
"publication":"Netflix Introduces Hollow, a Java Library for Processing In-Memory Datasets",
"publicationDate":"2017-01-31 00:00:00",
"author":"Michael Redlich",
"publicationType":"Article",
"publisher":"C4Media"
}
]
JSONファイルをJsonParser
でパースしてみる。
public static final String JSON_FILE = "publications.json";
InputStream fis = new FileInputStream(JSON_FILE);
JsonParser parser = Json.createParser(fis);
while(parser.hasNext()) {
JsonParser.Event event = parser.next();
switch(event) {
case START_ARRAY:
case END_ARRAY:
case START_OBJECT:
case END_OBJECT:
case VALUE_FALSE:
case VALUE_NULL:
case VALUE_TRUE:
System.out.println(event.toString());
break;
case KEY_NAME:
System.out.print(event.toString() + " " + parser.getString() + " - ");
break;
case VALUE_STRING:
case VALUE_NUMBER:
System.out.println(event.toString() + " " + parser.getString());
break;
}
}
fis.close();
JsonPointer
を使うと、JSONファイルにある特定の要素を見つけることができる。
InputStream fis = new FileInputStream(JSON_FILE);
JsonReader jsonReader = Json.createReader(fis);
JsonArray jsonArray = jsonReader.readArray();
JsonPointer pointer = Json.createPointer("/1/publication");
JsonValue publication = pointer.getValue(jsonArray);
System.out.println(i + ": " + publication);
fis.close();
このサンプルは上記のJSONファイルにある2番目の出版物を発見し出力する。我々はJSON-PとGson、Jacksonすべてをデモストレーションするプロジェクトを用意した。GitHubにある。
JSR-374ウェブサイトから最新の仕様をダウンロードしてレビューできる。
Java EEエヴァンジェリストとして知られるReza Rahman氏は最近J2EE 8でのJSONの役割について投稿した。
これら2つのAPIはJSONを標準Javaプラットフォームの第一級の市民にする意味でとても重要です。ちょうどJAXP (XML処理のためのJava API)とJAXB (XMLバインディングのためのJava API)がXMLに向けて何年も前にしたように。整ったこれら2つのAPIでJava開発者はもう1つのJavaシリアライゼーションフォーマットとしてJSONを単純に考えることができます。サードパーティのライブラリや設定はもう必要ありません。JSON処理に関してはそのまま単純に動作するでしょう。私の考えではこれらのAPIは重要です。モジュラーとなるJava SEリリースに実際は移されるべきです。まさにすでにJava SEの一部となったJAXBとJAXPのように。
JSON-PとJSON-Bの最終バージョンは2017年4月にリリースされる見込みだ。
資料
JSON-Pについては次の資料に詳しい情報がある。
- Dmitry Kornilov氏とWerner Keil氏によるJava EE 8におけるJSONサポートのプレゼンテーション
- Dmitry Kornilov氏によるAdopt-a-JSRセッションのプレゼンテーション
- Jitendra Kotamraju氏のJSON処理のためのJava API: JSONの導入記事
- JSR 353: JSON処理のためのJava API - 参照実装ウェブサイト
- オラクルによる19章3節 オブジェクトモデルAPIの使用チュートリアル
Rate this Article
- Editor Review
- Chief Editor Action