イントロダクション
前回は楽天APIをJavaから起動しました。URLパラメータを渡してJSONで取得するというシンプルなものでした。せっかくなのでJSONの扱い方をやってみます。
JavaでJSONを使う
扱い方は以下の3パターン
- JavaScriptを起動してJSONの中身を取得する(ScrptEngineManager参照)
- org.jsonのパッケージを使用する(デフォルトインストール※たぶん。。。)
- json-pathを使用などのライブラリを使用する
- 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」が使用できるようになったのもわかるような気がします。。。。
でわ今日もお茶ですかね?
[rakuten ids="fukucha:10000442"]