Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

Java API for JSON Processing(JSR 353)を触ってみましたー

ここ数日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

MavenJavaアプリケーションプロジェクトを作成

NetBeansの「ファイル」メニューから「新規プロジェクト」を選択
f:id:kikutaro777:20130718192212j:plain

プロジェクト名などは適当でいいです。
f:id:kikutaro777:20130718192218j:plain

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つだけ(^^;

  1. JsonObjectでJSONデータを生成して出力
  2. 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でJSONデータを出力してみる
        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でパースしてみる
        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使いそう(^^;

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村