読者です 読者をやめる 読者になる 読者になる

kagamihogeの日記

kagamihogeの日記です。

The Java EE 7 TutorialのJSON Processingの章をテキトーに訳した

英語の勉強中です。というわけで、The Java EE 7 Tutorial19 JSON Processingをテキトーに訳した。とはいえ、ここはさすがにあんま大してこと書いてないっすな。

19 JSON Processing

この章ではJava API for JSON Processing (JSR 353)を説明します。JSONとは、Webサービスとその他の連携アプリケーションで広く使われているデータ交換フォーマットです。JSR 353は、JSONデータをオブジェクトモデルもしくはストリーミングモデルで、パース・変換・クエリーをするための、APIを提供します。

このチュートリアルでは以下のトピックを扱います。*1

  • Introduction to JSON
  • JSON Processing in the Java EE Platform
  • Using the Object Model API
  • Using the Streaming API
  • JSON in Java EE RESTful Web Services
  • The jsonpmodel Example Application
  • The jsonpstreaming Example Application
  • Further Information about the Java API for JSON Processing

19.1 Introduction to JSON

JSONとは、Webサービスとその他の連携アプリケーションで広く使用されている、JavaScript起源のテキストベースなデータ交換フォーマットです。以下のセクションでは、JSONシンタックスJSONの概要、JSONのパースと生成の一般的なアプローチ、について紹介します。

19.1.1 JSON Syntax

JSONは二つのデータ構造(オブジェクトと配列)のみ定義しています。オブジェクトはname-valueペアの組み合わせであり、配列は値のリストです。JSONは7つの型を定義しており、string, number, object, array, true, false, nullです。

以下の例は、name-valueペアを含むサンプルのオブジェクトのJSONデータを示しています。nameが"phoneNumbers"のvalueは二つのオブジェクトを要素に持つ配列です。

{
   "firstName": "Duke",
   "lastName": "Java",
   "age": 18,
   "streetAddress": "100 Internet Dr",
   "city": "JavaTown",
   "state": "JA",
   "postalCode": "12345",
   "phoneNumbers": [
      { "Mobile": "111-111-1111" },
      { "Home": "222-222-2222" }
   ]
}

JSONは以下のようなシンタックスを持ちます。

  • オブジェクトは波括弧({})で囲われ、name-valueペアはカンマ(,)で区切られ、また、nameとvalueはコロン(:)で区切られます。オブジェクトのnameは文字列であり、nameに対応するvalueは7つの型のいずれかとなります。valueには、別のオブジェクトあるいは配列を含められます。
  • 配列は角括弧([])で囲われ、その値はカンマ(,)で区切られます。配列値は異なる型でもよく、別のオブジェクトあるいは配列を含められます。
  • オブジェクトと配列が別のオブジェクトや配列を含むとき、データ構造はツリーのようになります。

19.1.2 Uses of JSON

JSONは、インターネットを通してアプリケーションが相互通信する際のシリアライズ・デシアライズされる共通フォーマットとして使用されることがあります。これらのアプリケーションは異なる言語環境や環境で開発されています。JSONはオープンスタンダードなため、このような状況に適合します。また、read/writeが簡単で、他の表現よりもコンパクトで済みます。

RESTfulなwebサービスはリクエストとレスポンスのデータフォーマットとしてJSONを使用することがほとんどです。HTTPヘッダーにはリクエストやレスポンスがJSONデータであること示すために、下記のようにします。

Content-Type: application/json

JSONXMLよりもたいていはコンパクトで、その理由はJSONは閉じタグが不要なためです。XMLとは異なり、JSONJSONのデータ構造を定義したり検証するために広く支持されているスキーマはありません。

19.1.3 Generating and Parsing JSON Data

JSONデータの生成とパースには二つのプログラミングモデルがあり、XMLドキュメントで使用される方法に似ています。

  • オブジェクトモデル(object model)は、メモリ上にJSONデータを表現するツリーを生成します。このツリーは、ナビゲーション・分析・修正が可能です。このアプロ―チは最も柔軟性があり、ツリーの完全なコンテンツへのアクセスを要求する処理を可能にします。しかしながら、ストリーミングモデルに比べると処理速度の低下やメモリの消費をすることがあります。オブジェクトモデルは、一度ツリー全体を走査することでJSON出力を生成します。
  • ストリーミングモデル(streaming model)は、JSONデータの要素を一つ一つ読み込むイベントベースのパーサーを使用します。このパーサーは、オブジェクトや配列の開始や終了時・keyもしくはvalueの発見時に、イベントを生成して処理を中断します。各要素はアプリケーションのコードで処理や廃棄され、パーサーは次のイベントに進みます。このアプローチは、データの残り部分を必要としない、ローカル処理に適しています。ストリーミングモデルは、一要素ごとの関数呼び出しでストリームにJSON出力を生成します。

多くのプログラミング言語と環境において多数のJSONジェネレーターとパーサーが利用可能です。JSON Processing in the Java EE PlatformJava API for JSON Processing(JSR 353)で提供される機能について説明しています。

19.2 JSON Processing in the Java EE Platform

JSR 353をサポートするJava EEでは、Generating and Parsing JSON Dataで説明したオブジェクトモデルかストリーミングモデルを使用する、JSONデータのパース・変換・クエリのためのAPIが提供されています。The Java API for JSON Processingは以下のパッケージから構成されています。

  • javax.jsonパッケージは、readerインタフェース、writerインタフェース、オブジェクトモデルのためのmodel builderインタフェースで構成されています。また、他のユーティリティークラスとJSON要素用のJavaの型も含まれています。Table 19-1がこのパッケージの主要なクラスとインタフェースの一覧です。
  • javax.json.streamパッケージはストリーミングモデル用のパーサーとジェネレーターのインターフェースで構成されています。Table 19-2がこのパッケージの主要なクラスとインタフェースの一覧です。

Table 19-1 Main Classes and Interfaces in javax.json

クラスかインタフェース 説明
Json JSONパーサー・ビルダー・ジェネレーターのインスタンス生成staticメソッドで構成されています。また、このクラスはパーサー・ビルダー・ジェネレーターのファクトリオブジェクトを生成するためのメソッドも含まれます。
JsonReader ストリームからJSONデータを読み込んでメモリ上にオブジェクトモデルを生成します。
JsonObjectBuilder, JsonArrayBuilder アプリケーションのコードから要素を追加することでメモリ上のオブジェクトモデルや配列モデルを生成します。
JsonWriter メモリからストリームへオブジェクトモデルを書き込みます。
JsonValue JSONデータ上の要素(オブジェクト、配列、値など)。
JsonStructure JSONデータのオブジェクトや配列。このインタフェーズはJsonValueのサブタイプです。
JsonObject, JsonArray JSONデータのオブジェクトや配列。この二つのインタフェースはJsonStructureのサブタイプです。
JsonString, JsonNumber JSONデータのオブジェクトや配列。この二つのインタフェースはJsonValueのサブタイプです。
JsonException JSON処理中に発生した問題を示す例外

Table 19-2 Main Classes and Interfaces in javax.json.stream

クラスかインタフェース 説明
JsonParser ストリームやオブジェクトモデルからJSONデータを読み込めるイベントベースのパーサー
JsonGenerator JSONデータをストリームへ一度に一要素書き込みます。

19.3 Using the Object Model API

このセクションではオブジェクトモデルAPIの使用例を四つ紹介します。それぞれの内容は、JSONデータからのオブジェクトモデル生成、アプリケーションのコードからオブジェクトモデルを生成、オブジェクトモデルのナビゲーション、ストリームへのオブジェクトモデルの書き込み、になります。

19.3.1 Creating an Object Model from JSON Data

以下のコードはテキストファイルのJSONデータからオブジェクトモデルを生成する方法の例です。

import java.io.FileReader;
import javax.json.Json;
import javax.json.JsonReader;
import javax.json.JsonStructure;
...
JsonReader reader = Json.createReader(new FileReader("jsondata.txt"));
JsonStructure jsonst = reader.read();

オブジェクト参照jsonstの型は、ファイルの中身に依存して、JsonObjectJsonArrayどちらにも成りえます。JsonObjectJsonArrayJsonStructureのサブタイプです。この参照はツリーのトップを示しており、ツリーのナビゲーションと、JSONデータとしてストリームに書き込むことが可能です。

19.3.2 Creating an Object Model from Application Code

以下のコードはアプリケーションコードからオブジェクトモデルを生成する方法の例です。

import javax.json.Json;
import javax.json.JsonObject;
...
JsonObject model = Json.createObjectBuilder()
   .add("firstName", "Duke")
   .add("lastName", "Java")
   .add("age", 18)
   .add("streetAddress", "100 Internet Dr")
   .add("city", "JavaTown")
   .add("state", "JA")
   .add("postalCode", "12345")
   .add("phoneNumbers", Json.createArrayBuilder()
      .add(Json.createObjectBuilder()
         .add("type", "mobile")
         .add("number", "111-111-1111"))
      .add(Json.createObjectBuilder()
         .add("type", "home")
         .add("number", "222-222-2222")))
   .build();

オブジェクト参照modelはツリーのトップを示しており、この参照はaddメソッドのネスト呼び出しとbuildメソッドを呼び出すことで生成されます。JsonObjectBuilderクラスは以下のようなaddメソッドを持っています。

JsonObjectBuilder add(String name, BigDecimal value)
JsonObjectBuilder add(String name, BigInteger value)
JsonObjectBuilder add(String name, boolean value)
JsonObjectBuilder add(String name, double value)
JsonObjectBuilder add(String name, int value)
JsonObjectBuilder add(String name, JsonArrayBuilder builder)
JsonObjectBuilder add(String name, JsonObjectBuilder builder)
JsonObjectBuilder add(String name, JsonValue value)
JsonObjectBuilder add(String name, long value)
JsonObjectBuilder add(String name, String value)
JsonObjectBuilder addNull(String name)

JsonArrayBuilderクラスは、name (key)パラメータを取らないaddメソッドも持っています。JsonArrayBuilderオブジェクトを引数に渡したり、addメソッドと同等なJsonObjectBuilderオブジェクトを使うことで、オブジェクトと配列をネストさせられます。

結果として出来あがるJSONのツリー表現はJSON Syntaxを参照してください。

19.3.3 Navigating an Object Model

以下のコードはオブジェクトモデルのナビゲーションのシンプルな例です。

import javax.json.JsonValue;
import javax.json.JsonObject;
import javax.json.JsonArray;
import javax.json.JsonNumber;
import javax.json.JsonString;
...
public static void navigateTree(JsonValue tree, String key) {
   if (key != null)
      System.out.print("Key " + key + ": ");
   switch(tree.getValueType()) {
      case OBJECT:
         System.out.println("OBJECT");
         JsonObject object = (JsonObject) tree;
         for (String name : object.keySet())
            navigateTree(object.get(name), name);
         break;
      case ARRAY:
         System.out.println("ARRAY");
         JsonArray array = (JsonArray) tree;
         for (JsonValue val : array)
            navigateTree(val, null);
         break;
      case STRING:
         JsonString st = (JsonString) tree;
         System.out.println("STRING " + st.getString());
         break;
      case NUMBER:
         JsonNumber num = (JsonNumber) tree;
         System.out.println("NUMBER " + num.toString());
         break;
      case TRUE:
      case FALSE:
      case NULL:
         System.out.println(tree.getValueType().toString());
         break;
   }
}

navigateTreeメソッドCreating an Object Model from JSON DataCreating an Object Model from Application Codeで組み立てられるモデルを使用して、以下のように呼び出します。

navigateTree(model, null);

navigateTreeメソッドは二つの引数を取り、それぞれJSON要素とkeyです。keyはオブジェクト内のkey-valueペアを表示する際にのみ使用します。ツリーの要素はJsonValue型で表現されます。もし要素がオブジェクトか配列ならば、オブジェクトや配列に含まれる全要素に対してこのメソッド再帰呼び出しします。もし要素が値ならば、標準出力に出力します。

JsonValue.getValueTypeメソッドは要素がオブジェクト・配列・値のどれなのかを調べます。オブジェクトでは、JsonObject.keySetメソッドはオブジェクトのキーのセットを返し、JsonObject.get(String name)メソッドはkeyがnameである要素の値を返します。配列では、JsonArrayList<JsonValue>インタフェースを実装しています。JsonArrayインスタンスJsonObject.keySetが返すSet<String>インスタンスには拡張forループが使用可能です。

navigateTreeメソッドCreating an Object Model from Application Codeで作られるモデルで実行すると以下のような出力になります。

OBJECT
Key firstName: STRING Duke
Key lastName: STRING Java
Key age: NUMBER 18
Key streetAddress: STRING 100 Internet Dr
Key city: STRING JavaTown
Key state: STRING JA
Key postalCode: STRING 12345
Key phoneNumbers: ARRAY
OBJECT
Key type: STRING mobile
Key number: STRING 111-111-1111
OBJECT
Key type: STRING home
Key number: STRING 222-222-2222

19.3.4 Writing an Object Model to a Stream

Creating an Object Model from JSON DataCreating an Object Model from Application Code で作成したオブジェクトモデルはJsonWriterクラスを使用して以下のようにストリームへ書き込めます。

import java.io.StringWriter;
import javax.json.JsonWriter;
...
StringWriter stWriter = new StringWriter();
JsonWriter jsonWriter = Json.createWriter(stWriter);
jsonWriter.writeObject(model);
jsonWriter.close();

String jsonData = stWriter.toString();
System.out.println(jsonData);

Json.createWriterメソッドは引数として出力用のストリームを取ります。JsonWriter.writeObjectメソッドはストリームへオブジェクトを書き込みます。JsonWriter.closeメソッドは内部的に持っている出力ストリームをクローズします。

以下の例はtry-with-resourcesでJSONのライターを自動的にクローズしています。

StringWriter stWriter = new StringWriter();
try (JsonWriter jsonWriter = Json.createWriter(stWriter)) {
   jsonWriter.writeObject(model);
}

String jsonData = stWriter.toString();
System.out.println(jsonData);

19.4 Using the Streaming API

ストリーミングAPIの使用例を二つ説明します。

  • パーサーを使用するJSONデータの読み込み。
  • ジェネレーターを使用するJSONデータの書き込み。

19.4.1 Reading JSON Data Using a Parser

ストリーミングAPIJSONテキストのパースに最も効果的なアプローチです。以下のコードはJsonParserオブジェクトの生成とイベントを使用したJSONデータのパースの方法を示します。

import javax.json.Json;
import javax.json.stream.JsonParser;
...
JsonParser parser = Json.createParser(new StringReader(jsonData));
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;
   }
}

この例は三ステップで構成されています。

  1. Json.createParser staticメソッド呼び出しによるパーサーインスタンスの取得。
  2. JsonParser.hasNextJsonParser.nextメソッドでパーサーイベントをイテレート。
  3. 各要素にローカルでの処理を施す。

この例ではパーサーの10個のイベントタイプを使用しています。パーサーのnextメソッドは次のイベントに進めます。KEY_NAME, VALUE_STRING, VALUE_NUMBERイベントタイプでは、JsonParser.getStringメソッドを呼び出すことで要素の内容を取得できます。VALUE_NUMBERイベントでは、以下のメソッドも使用できます。

  • JsonParser.isIntegralNumber
  • JsonParser.getInt
  • JsonParser.getLong
  • JsonParser.getBigDecimal

javax.json.stream.JsonParserインタフェースの詳細な情報についてはJava EE 7 APIリファレンスを参照してください。

この例の出力は以下のようになります。

START_OBJECT
KEY_NAME firstName - VALUE_STRING Duke
KEY_NAME lastName - VALUE_STRING Java
KEY_NAME age - VALUE_NUMBER 18
KEY_NAME streetAddress - VALUE_STRING 100 Internet Dr
KEY_NAME city - VALUE_STRING JavaTown
KEY_NAME state - VALUE_STRING JA
KEY_NAME postalCode - VALUE_STRING 12345
KEY_NAME phoneNumbers - START_ARRAY
START_OBJECT
KEY_NAME type - VALUE_STRING mobile
KEY_NAME number - VALUE_STRING 111-111-1111
END_OBJECT
START_OBJECT
KEY_NAME type - VALUE_STRING home
KEY_NAME number - VALUE_STRING 222-222-2222
END_OBJECT
END_ARRAY
END_OBJECT

19.4.2 Writing JSON Data Using a Generator

以下のコードはストリーミングAPIを使用してファイルへJSONデータを書き込む方法の一例です。

FileWriter writer = new FileWriter("test.txt");
JsonGenerator gen = Json.createGenerator(writer);
gen.writeStartObject()
   .write("firstName", "Duke")
   .write("lastName", "Java")
   .write("age", 18)
   .write("streetAddress", "100 Internet Dr")
   .write("city", "JavaTown")
   .write("state", "JA")
   .write("postalCode", "12345")
   .writeStartArray("phoneNumbers")
      .writeStartObject()
         .write("type", "mobile")
         .write("number", "111-111-1111")
      .writeEnd()
      .writeStartObject()
         .write("type", "home")
         .write("number", "222-222-2222")
      .writeEnd()
   .writeEnd()
.writeEnd();
gen.close();

この例は、引数にwriterか出力ストリームを取るJson.createGenerator staticメソッドを呼ぶことでJSONジェネレーターを取得しています。この例はJSONデータをtest.txtファイルへ書き込むために、write, writeStartArray, writeStartObject, writeEndメソッドをネストさせて呼び出しています。JsonGenerator.closeメソッドは内部的に持つwriterや出力ストリームをクローズします。

19.5 JSON in Java EE RESTful Web Services

このセクションでは、Java EEパッケージとJava API for JSON Processingが、どのようにRESTful webサービスのためのJSONサポートを提供しているか、について説明します。RESTful webサービスの詳細情報についてはChapter 29, "Building RESTful Web Services with JAX-RS,"を参照してください。

GlassFish Serverに含まれるJAX-RS (JSR 311)の参照実装のJerseyは、JSONデータをRESTfulなリソースメソッドからJAXBを使用するJavaオブジェクトへのバインディングを提供しています。これについてはUsing JAX-RS with JAXB in Chapter 31, "JAX-RS: Advanced Topics and an Example"で解説しています。しかしながら、JSONサポートはJAX-RS (JSR 311)やJAXB (JSR 222)の一部ではないので、GlassFish Server以外のJava EE実装では動作しません。

The Java API for JSON Processing (JSR 353)は、JavaにおけるJSONバインディングをサポートしません。Java EEの将来のリリースでJAXB for XMLのようなJSR(JSON Binding)が検討されています。

JAX-RSリソースメソッドではJava API for JSON Processingを使用できます。詳細については、Java EE 7 SDKに含まれるJSON Processingのサンプルコードを参照してください。

19.6 The jsonpmodel Example Application

このセクションではjsonpmodelサンプルアプリケーションのビルドと実行方法を説明します。このサンプルはwebアプリケーションで、フォームデータからのオブジェクトモデル作成、JSONデータのパース、オブジェクトモデルAPIを使用したJSONデータの書き込み、の方法を示します。

jsonpmodelサンプルアプリケーションは、tut-install/examples/web/jsonp/jsonpmodelディレクトリ*2にあります。

19.6.1 Components of the jsonpmodel Example Application

jsonpmodelサンプルアプリケーションは以下のファイルから構成されています。

  • 三つのJSFページ。
    • index.xhtmlページ。フォーム入力用。
    • modelcreated.xhtmlページ。JSONデータをテキストエリアに表示する。
    • parsejson.xhtmlページ。オブジェクトモデルの要素をテーブルで表示する。
  • ObjectModelBean.javaマネージドbean。セッションスコープのマネージドbeanで、フォームのデータを格納し、Faceletsページ間のナビゲーションを行う。また、JSONオブジェクトモデルAPIを使用するコードも含まれる。

ObjectModelBean.javaで、フォームのデータからオブジェクトモデルを生成するために使用されるコードは、Creating an Object Model from Application Codeの例と同様です。モデルからJSON出力を書き込むためのコードはWriting an Object Model to a Streamの例と同様です。オブジェクトモデルのツリーをナビゲートするコードはNavigating an Object Modelの例と同様です。

19.6.2 Running the jsonpmodel Example Application

このセクションではNetBeans IDEコマンドラインを使用してjsonpmodelサンプルアプリケーションを動作させる方法を説明します。

19.6.2.1 To Run the jsonpmodel Example Application Using NetBeans IDE

  1. GlassFishサーバが実行中なことを確認(Starting and Stopping GlassFish Serverを参照)
  2. FileメニューからOpen Projectを選択
  3. Open Projectダイアログボックスから以下のディレクトリに移動。
    tut-install/examples/web/jsonp
  4. jsonpmodelフォルダを選択。
  5. Open Projectをクリック。
  6. Projectsタブでjsonpmodelプロジェクトを右クリックしてRunを選択。
    このコマンドはアプリケーションをビルドしてWARファイル(jsonpmodel.war)にパッケージしてtargetディレクトリに配置し、サーバにデプロイし、以下のURLでwebブラウザーを開きます。
    http://localhost:8080/jsonpmodel/
  7. ページ上のデータを編集してフォームをサブミットするためにCreate a JSON Objectをクリックします。その次のページはフォームデータのJSONオブジェクトを表示します。
  8. Parse JSONをクリック。その次のページはオブジェクトモデルツリーのノード一覧のテーブルを表示します。

19.6.2.2 To Run the jsonpmodel Example Application Using Maven

  1. GlassFishサーバが実行中なことを確認(Starting and Stopping GlassFish Serverを参照)
  2. ターミナルで以下に移動:
    tut-install/examples/web/jsonp/jsonpmodel
  3. アプリケーションをデプロイするために以下のコマンドを実行。
    mvn install
  4. webブラウザを開いて以下のアドレスを入力。
    http://localhost:8080/jsonpmodel/
  5. ページでデータを入力してフォームをサブミットするためにCreate a JSON Objectをクリックします。その次のページはフォームデータのJSONオブジェクトを表示します。
  6. Parse JSONをクリック。その次のページはオブジェクトモデルツリーのノード一覧のテーブルを表示します。

19.7 The jsonpstreaming Example Application

このセクションではjsonpstreamingサンプルアプリケーションのビルドと実行方法を説明します。このサンプルはwebアプリケーションで、フォームデータからJSONデータ作成、JSONデータのパース、ストリーミングAPIを使用したJSONデータの書き込み、の方法を示します。

jsonpstreamingサンプルアプリケーションは、tut-install/examples/web/jsonp/jsonpstreamingディレクトリ*3にあります。

19.7.1 Components of the jsonpstreaming Example Application

jsonpstreamingサンプルアプリケーションは以下のファイルから構成されています。

  • 三つのJSFページ。
    • index.xhtmlページ。フォーム入力用。
    • filewritten.xhtmlページ。JSONデータをテキストエリアに表示する。
    • parsed.xhtmlページ。パーサーのイベントリストをテーブルで表示する。
  • StreamingBean.javaマネージドbean。セッションスコープのマネージドbeanで、フォームのデータを格納し、Faceletsページ間のナビゲーションを行う。また、JSONストリーミングAPIを使用するコードも含まれる。

StreamingBean.javaで、ファイルにJSONデータを書き込むために使用されるコードは、Writing JSON Data Using a Generatorの例と同様です。ファイルからJSONデータをパースするコードはReading JSON Data Using a Parserの例と同様です。

19.7.2 Running the jsonpstreaming Example Application

このセクションではNetBeans IDEコマンドラインを使用してjsonpstreamingサンプルアプリケーションを動作させる方法を説明します。

19.7.2.1 To Run the jsonpstreaming Example Application Using NetBeans IDE

  1. GlassFishサーバが実行中なことを確認(Starting and Stopping GlassFish Serverを参照)
  2. FileメニューからOpen Projectを選択
  3. Open Projectダイアログボックスから以下のディレクトリに移動。
    tut-install/examples/web/jsonp
  4. jsonpstreamingフォルダを選択。
  5. Open Projectをクリック。
  6. Projectsタブでjsonpstreamingプロジェクトを右クリックしてRunを選択。
    このコマンドはアプリケーションをビルドしてWARファイル(jsonpstreaming .war)にパッケージしてtargetディレクトリに配置し、サーバにデプロイし、以下のURLでwebブラウザーを開きます。
    http://localhost:8080/jsonpstreaming/
  7. ページ上のデータを編集してフォームをサブミットしてJSONオブジェクトをテキストファイルに書き込むためにWrite a JSON Object to a Fileをクリックします。その次のページはテキストファイルの中身を表示します。
  8. Parse JSON from Fileをクリック。その次のページはテキストファイルのJSONデータのパーサーイベントのリストをテーブルで表示します。

19.7.2.2 To Run the jsonpstreaming Example Application Using Maven

  1. GlassFishサーバが実行中なことを確認(Starting and Stopping GlassFish Serverを参照)
  2. ターミナルで以下に移動:
    tut-install/examples/web/jsonp/jsonpstreaming/
  3. アプリケーションをデプロイするために以下のコマンドを実行。
    mvn install
  4. webブラウザを開いて以下のアドレスを入力。
    http://localhost:8080/jsonpstreaming/
  5. ページ上のデータを編集してフォームをサブミットしてJSONオブジェクトをテキストファイルに書き込むためにWrite a JSON Object to a Fileをクリックします。その次のページはテキストファイルの中身を表示します。
  6. Parse JSON from Fileをクリック。その次のページはテキストファイルのJSONデータのパーサーイベントのリストをテーブルで表示します。

19.8 Further Information about the Java API for JSON Processing

Java EEにおけるJSON処理の詳細な情報については、Java API for JSON Processingの仕様を参照してください。

https://www.jcp.org/en/jsr/detail?id=353

関連リンク

*1:原文では下記の一覧からそのページへのリンクがあるが、めんどいので省略

*2:https://java.net/projects/javaeetutorial/sources/svn/show/trunk/examples/web/jsonp/jsonpmodel と思われる

*3:https://java.net/projects/javaeetutorial/sources/svn/show/trunk/examples/web/jsonp/jsonpstreaming と思われる