JSONをJavaで使う

JSONで送信された値をサーバーサイドで用いる方法をわかりやすく説明しているサイトがあったので、その内容をまとめたいと思います。

JSONをJavaで使う際に行う処理は、三つのステップに分類されます。

  1. HTTPリクエストで文字列を取得する

  2. とってきた文字列をJSONオブジェクトに変換する

  3. JSONを解析してデータをとりだす

1については、以前まとめたこちらの記事が少し役に立つと思います。

以下がコードです。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

@SuppressWarnings("deprecation")
public class ParseJSON {
    public static void main(String args[]) {
        //StringBuilderを使って可変長の文字列を扱う
        //StringBuilderの使い方:http://www.javadrive.jp/start/stringbuilder/index1.html
        StringBuilder builder = new StringBuilder();
        //HttpClientのインスタンスを作る(HTTPリクエストを送るために必要)
        HttpClient client = new DefaultHttpClient();
        //HttpGetのインスタンスを作る(GETリクエストを送るために必要)
        HttpGet httpGet = new HttpGet(
                "任意のURL");
        try {
            //リクエストしたリンクが存在するか確認するために、HTTPリクエストを送ってHTTPレスポンスを取得する
            HttpResponse response = client.execute(httpGet);
            //返却されたHTTPレスポンスの中のステータスコードを調べる
            // -> statusCodeが200だったらページが存在。404だったらNot found(ページが存在しない)。500はInternal server error。
            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode == 200) {
                //HTTPレスポンスが200よりページは存在する
                //レスポンスからHTTPエンティティ(実体)を生成
                HttpEntity entity = response.getEntity();
                //HTTPエンティティからコンテント(中身)を生成
                InputStream content = entity.getContent();
                //コンテントからInputStreamReaderを生成し、さらにBufferedReaderを作る
                //InputStreamReaderはテキストファイル(InputStream)を読み込む
                //BufferedReaderはテキストファイルを一行ずつ読み込む
                //(参考)http://www.tohoho-web.com/java/file.htm
                BufferedReader reader = new BufferedReader(new InputStreamReader(content));
                String line;
                //readerからreadline()で行を読んで、builder文字列(StringBuilderクラス)に格納していく。
                //※このプログラムの場合、lineは一行でなのでループは回っていない
                //※BufferedReaderを使うときは一般にこのように記述する。
                while ((line = reader.readLine()) != null) {
                    builder.append(line);
                }
            } else {
                System.out.println("Failed to download file");
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 文字列をJSONオブジェクトに変換する
        try {
            //JSON Arrayを作成する(文字列としてのJSONをJSON Arrayに変換)
            //builderはStringBuilderクラスなのでtoString()で文字列に変換
            JSONArray jsonArray = new JSONArray(builder.toString());

            //JSON Objectを作成する
            for (int i = 0; i < jsonArray.length(); i++) {
                //getJSONObjectでJSON Arrayに格納された要素をJSON Objectとして取得できる
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                //JSON Objectをパースする
                //表示する際はgetString("hoge")で"hoge"をキーとする値を取得できる
                //userのように入れ子になっているときは、getJSONObject()を使って階層を下っていく
                                System.out.println(i);
                System.out.println(jsonObject.getString("hoge"));               
                System.out.println();//改行
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

【出典】
・ http://d.hatena.ne.jp/seinzumtode/20130426/1366934641
・ http://www.vogella.com/tutorials/ApacheHttpClient/article.html
・ https://hacknote.jp/archives/29062
・ http://tkm0on.hatenablog.com/entry/2015/05/21/183608