JSONとJSONIC

JSONはJavaScript Object Notationの略で、JavaScriptでのハッシュとリストの記述法を利用したテキストベースのデータフォーマットだ。JavaScriptではeval()関数でオブジェクトに変換できるなど取り扱いが容易であるため、Ajaxでのデータ交換フォーマットとして利用されることが多い(セキュリティ面の問題から実際にはeval()関数で評価せず、JSONパーサを利用するほうが望ましい)。

JSONICとはJavaオブジェクトとJSONを相互変換するためのオープンソースのライブラリだ。JSONIC以外にもJavaで利用可能なJSONライブラリにはJSON-libなどがあるが、JSONICは使い方が簡単で依存ライブラリもなく、XMLからJSONへの変換や高度な拡張性など、機能面でも優れている。

JSONというとAjaxでのデータのやり取りに使われるデータフォーマットというイメージが強いが、使い方次第ではAjaxを使わないケースでも利用する価値がある。本稿ではJSONICを使ってJavaによるWebアプリケーション開発でJSONを活用する方法を紹介する。なお、本稿の内容は執筆時点の最新版であるJSONIC 0.9.7に基づいている。

JSONICの使い方

JSONICのAPIは非常にシンプルだ。JSONとJavaオブジェクトの変換は、net.arnx.jsonic.JSONのstaticメソッドであるencode()メソッドとdecode()メソッドで行うことができる。encode()メソッドにはJavaBeanのほか、MapやList、配列を渡すことも可能だ。JavaBeanのpublicフィールドはゲッターメソッドがなくてもプロパティとして扱ってくれる。また、staticなゲッタープロパティおよびtransientが付与されたフィールドは変換対象にならない。

import net.arnx.jsonic.JSON;
...

// POJOをJSONに変換
String text = JSON.encode(new Hoge());

// JSONをPOJOに変換
Hoge hoge = JSON.decode(text, Hoge.class);

これだけシンプルだと使い方に迷うことはないだろう。このシンプルさがJSONICの最大の特徴だ。なお、encode()メソッドの第2引数にtrueを指定することで、見やすくフォーマットされたJSONを取得することができる。また、decode()メソッドは文字列だけでなく、ReaderやInputStreamを渡してデコードを行うことも可能だ。また、org.w3c.dom.Documentもしくはorg.w3c.dom.Elementを渡すことでXMLをJSONに変換することもできる。

// POJOをフォーマットされたJSONに変換
String text = JSON.encode(new Hoge(), true);