ここ数日JavaのJSONライブラリJacksonのData Bindingを簡単に触ってきました。
実は初JSONっていうすごい時代遅れな自分ですが…(-_-;
で、せっかくJSONを少し触ったので、Java EE 7で新たに加わったJava API for JSON Processing(JSR 353)も触れてみようと思ってやってみました。
なんか「Java EE 7で追加!」とよく言われるので、Java SEだと書けないの…?とかJava素人な自分は変に勘違いしてたのですが、普通に書けるんですね(^^;なんというか、この辺りが未だ慣れていない…。
主な情報サイトは
Java Community ProcessのJSR 353
http://jcp.org/en/jsr/detail?id=353
JSON Processing
https://jsonp.java.net/
The Java EE 7 TutorialのJSON Processing
http://docs.oracle.com/javaee/7/tutorial/doc/jsonp.htm
Java(TM) EE 7 Specification APIs(JavaDoc)
http://docs.oracle.com/javaee/7/api/
日本語情報だと
Oracle寺田さんのJava EE 7リリース資料
スライドの46ページからJSONの情報が載ってます。
(はてなブログ、ページ指定で貼れないのかな(^^;)
しんさんの出張所 はてな編 JavaEE 7にJSONライブラリなんてきてなかった
http://d.hatena.ne.jp/shin/20130616
こちらは見解というか…(^^;ズバッと一刀両断
あたりでしょうか。
で、以下ショボイサンプル作ったメモです(^^;
環境
OS : Windows 7 Professional 32bit
IDE : NetBeans 7.3.1
JDK : JDK7
NetBeansの「ファイル」メニューから「新規プロジェクト」を選択

プロジェクト名などは適当でいいです。

pom.xmlの設定
依存性に以下2つを加えます。
<dependency>
<groupId>javax.json</groupId>
<artifactId>javax.json-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.0.1</version>
</dependency>
ビルドしてダウンロードされればOKです。
サンプルコードを書く
題材はなんだっちゃいいのですが、「JacksonのJSON Data Bindingで実際のWeb APIからデータ取得してみた」でも使ったHeartRails ExpressのWeb APIを題材にしました。
HeartRails Express
http://express.heartrails.com/api.html
路線や駅名、エリアや都道府県情報などの地理情報が取得できるサービス。
題材にするのは以下APIを実行した結果
http://express.heartrails.com/api/json?method=getAreas
試したのは2つだけ(^^;
- JsonObjectでJSONデータを生成して出力
- JsonParserでWeb API結果を取得してゴニョゴニョと出力
package jp.co.hoge.jsonprocessingexample;
import java.io.IOException;
import java.net.URL;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.stream.JsonParser;
import static javax.json.stream.JsonParser.Event.KEY_NAME;
import static javax.json.stream.JsonParser.Event.VALUE_STRING;
public class App
{
public static void main( String[] args ) throws IOException
{
JsonObject value = Json.createObjectBuilder()
.add("response", Json.createObjectBuilder()
.add("area", Json.createArrayBuilder()
.add("北海道")
.add("東北")
.add("関東")
.add("中部")
.add("近畿")
.add("中国")
.add("四国")
.add("九州")
)
).build();
System.out.println(value.toString());
JsonParser parser =
Json.createParser(
new URL("http://express.heartrails.com/api/json?method=getAreas").openStream()
);
while(parser.hasNext()){
JsonParser.Event event = parser.next();
switch(event){
case KEY_NAME:
System.out.println("Key =" + parser.getString());
break;
case VALUE_STRING:
System.out.println("Value=" + parser.getString());
break;
default:
break;
}
}
}
}
結果は
{"response":{"area":["北海道","東北","関東","中部","近畿","中国","四国","九州"]}}
Key =response
Key =area
Value=北海道
Value=東北
Value=関東
Value=中部
Value=近畿
Value=中国
Value=四国
Value=九州
みたいな。
とりあえず今の時点では、Jacksonのデータバインディングみたいなことはできないようで残念です(-_-;
http://www.infoq.com/jp/news/2013/05/standard-java-api-for-json
しばらくJackson使いそう(^^;