JSON-libの概要
JSON-libは,JavaオブジェクトからJSON形式の文字列を生成したり,その逆の処理を行うJavaライブラリです。Ajaxアプリケーションにおいて,Webブラウザで動作しているJavaScriptのプログラムとサーバ側のプログラムとの間でオブジェクトをやり取りする際に利用できます。JAR形式のファイルをSourceForgeからダウンロード可能です。ライセンスはThe Apache Software License, Version 2.0です。
JDK1.3用(json-lib-1.1-jdk13.jar)とJDK1.5用(json-lib-1.1-jdk15.jar)がありますので,使用するJDKのバージョンに合ったものをダウンロードし,ファイルのパスをクラスパス(CLASSPATH)に設定してください。ここではJDK1.5用による実行例を紹介します。
実際の処理では,これ以外にも以下のライブラリも必要になりますので,合わせてダウンロードし,JARファイルをクラスパスに設定しておいてください。
JSON-libの実行に必要なライブラリ
- EZMorph (http://ezmorph.sourceforge.net/)
- Jakarta Commons BeanUtils (http://jakarta.apache.org/commons/beanutils/)
- Jakarta Commons Lang (http://jakarta.apache.org/commons/lang/)
- Jakarta Commons Logging (http://jakarta.apache.org/commons/logging/)
- Jakarta ORO (http://jakarta.apache.org/oro/)
- JUnit (http://junit.org/)
- XOM (http://xom.nu/)
JSONの概要
JSON-libを紹介する前に,JSON形式の文字列についてふれておきましょう。
Web APIで採用されるJSON
JSON(JavaScript Object Notation)とは,JavaScriptにおいて,オブジェクトの定義を行う際に用いられる表記方法です。RFC4627でも規定されています。このところWeb APIを公開する動きが加速していますが,その処理結果を返す際の形式として,JSONが採用されることが増えてきています。ちなみに,JavaScript関数の引数でJSON形式を用いる場合はJSONP(JSON with Padding)と呼ばれます。
JSON形式で処理結果を返すWeb APIの例
- ●国内サイト
- ●海外サイト
JSON形式によるオブジェクトの定義
Ajaxの広がりに伴い公開されるようになったWeb APIは,XML形式で処理結果を返すのが現在は主流です。XMLデータから必要とする部分を取得するには,DOM APIを用いる必要がありますが,メソッドなどの記述がどうしても複雑になりがちです。しかしJSONであれば,文字列からそのままオブジェクトを定義できるため,必要なデータをDOM APIよりも簡便な記述で取得できます。
たとえば,ID番号(id),画像ファイル名(filename)と画像のタイトル(title)という3つのプロパティを持つオブジェクト(data)をJSONで定義すると,以下のようになります。
data = { "id" : 1, "title" : "東京ミッドタウン", "filename" : "midtown01.JPG" };
1つのオブジェクト定義は{}で囲み,: (コロン)を挟む左右のデータで1つのプロパティを表します。プロパティは
1つのオブジェクト定義を, (カンマ)で区切り,複数の定義を[ ]で囲めば,配列を定義できます。以下は2つのオブジェクトを要素とする配列dataを定義する例です。
data = [
{ "id" : 1, "title" : "東京ミッドタウン", "filename" : "midtown01.JPG" },
{ "id" : 2, "title":"新丸ビル", "filename" : "shinmaru01.JPG" }
];
JSONには関数の定義を含めることもできます。以下のcalcオブジェクトには,足し算をするplus関数と,引き算をするminus関数を定義しています。実行結果は,calc.plus(5,3)が8,calc.minus(5,3)が2となります。
calc = {
"plus" : function(a, b) { return a + b; },
"minus" : function(a, b) { return a - b; }
};
JSON形式の文字列からオブジェクトを生成する場合は,文字列の両端に()を追加してeval関数の引数とし,これを実行します。Ajaxアプリケーションにおいて,Web APIからJSON形式のデータを取得する際に,よく用いられます。
json = '{ "id" : 1, "title" : "東京ミッドタウン" }';
data = eval( '(' + json + ')' );
alert( '画像ID = ' + data.id + ', タイトル = ' + data.title );

