Java JSON 〜楽天の商品リストを表示する〜

イントロダクション

前回は楽天APIをJavaから起動しました。URLパラメータを渡してJSONで取得するというシンプルなものでした。せっかくなのでJSONの扱い方をやってみます。

JavaでJSONを使う

扱い方は以下の3パターン

  1. JavaScriptを起動してJSONの中身を取得する(ScrptEngineManager参照)
  2. org.jsonのパッケージを使用する(デフォルトインストール※たぶん。。。)
  3. json-pathを使用などのライブラリを使用する
  4. JSONを人力でパース(使いやすいように変換)する

今回は3番を選択しました。

ソースを見た方が早いので。。。

// URLを指定
URL url = new URL(RAKUTEN_API.toString());
// URLコネクション取得
connection = url.openConnection();
// JSONTokenerを取得
JSONTokener tokener  = new JSONTokener(connection.getInputStream());
// JSONオブジェクトに変換
JSONObject json = new JSONObject(tokener);
// JSONオブジェクトを出力
System.out.println(json.toString());

前回はここまでやりました。


※ちょっとやり方が違います。。。それはJSONObjectを使用するパッケージが違っても同じ名前で使用しているのでややこしいことになり、結局は「org.json」パッケージのものを使用することにしました。

JSONデータを取得

結論から言って、以下のようになります。

// 一番上の階層からItemsを取得する(2階層目)
JSONArray items = json.getJSONArray("Items");
System.out.println("*** 商品 ***");
for(int i = 0; i < 1; i++) {
         // 2階層目の中身を取得する
	 JSONObject shohinRoot = items.getJSONObject(i);
	 JSONObject shohin = shohinRoot.getJSONObject("Item");
	 // ジャンルID
	 String jenerId = shohin.getString("genreId");
	 ・
	 ・
	 ・

JSONでデータを扱う時に注意したいのは階層化している時に中身のデータフォーマットをちゃんと指定しないとClassCastExceptionになってしまうのでちょっとめんどくさいです。何か簡単なインターフェースでも欲しい穂ところですね(笑)

ここからさらに階層を下がっていくときはJSONArrayなのかJSONObjectなのかキチッと確かめて、取得する値も文字なのか数値なのか確かめないとエラーになります。

Javaが新しくなって「var」が使用できるようになったのもわかるような気がします。。。。

でわ今日もお茶ですかね?