JSONで送信された値をサーバーサイドで用いる方法をわかりやすく説明しているサイトがあったので、その内容をまとめたいと思います。
JSONをJavaで使う際に行う処理は、三つのステップに分類されます。
HTTPリクエストで文字列を取得する
とってきた文字列をJSONオブジェクトに変換する
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