サイト移転のお知らせ:http://techbooster.org/に移転しました

JSONをパース(解析)する

11月 17, 2010   //   by kkato   //   アプリケーション  //  1 Comment

XMLをパース(解析)する」、「DefaultHttpClientを使ってコンテンツを取得する」とWeb上のXMLコンテンツを取得してパースする方法を紹介しましたが、今回はJSONをパースする方法を紹介します。

AndroidでシンプルにJSONを扱うにはJSONObjectクラスJSONArrayクラスを用いる方法があります。

今回はATND APIを使った例を紹介しますが、他にもTwitterなどJSONで結果を返すWebAPIが増えてきていると思います。

ATND APIでAndroidが含まれているものを検索して、そのタイトルを表示してみようと思います。

それでは続きで

データ取得

まずはデータの取得を行います。「DefaultHttpClientを使ってコンテンツを取得する」とほとんどソースは一緒です。

APIのURIは「Androidが含まれているものを検索。フォーマットがJSONで」という意味です。

ATND APIの詳細はATND API リファレンスを参照してください。

        HttpClient httpClient = new DefaultHttpClient();

        StringBuilder uri = new StringBuilder("http://api.atnd.org/events/?keyword=android&format=json");
        HttpGet request = new HttpGet(uri.toString());
        HttpResponse httpResponse = null;

        try {
        	httpResponse = httpClient.execute(request);
        } catch (Exception e) {
        	Log.d("JSONSampleActivity", "Error Execute");
        	return;
        }

        int status = httpResponse.getStatusLine().getStatusCode();

        if (HttpStatus.SC_OK == status) {
        	try {
        		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        		httpResponse.getEntity().writeTo(outputStream);
                String data;
                data = outputStream.toString(); // JSONデータ
        	} catch (Exception e) {
            	  Log.d("JSONSampleActivity", "Error");
		    }
        } else {
        	Log.d("JSONSampleActivity", "Status" + status);
        	return;
        }

JSONをパース(解析)する

JSONとして取得した結果をパースしましょう。まずはルートオブジェクトを取得します。

このルートオブジェクトから必要な要素まで辿って行くことになります。

JSONObject rootObject = new JSONObject(data);

ATND APIのリファレンスを見るとルートに下には

  • results_returned
  • results_start
  • event

の要素があると書いてあります。今回はイベントのタイトルを表示したいのでルートオブジェクトからevent要素を得る必要があります。
ただし、event要素は配列ですのでJSONObjectではなくJSONArrayクラスで取得します。getJSONArrayメソッドで要素名を指定して取得します。要素名はeventsです。

JSONArray eventArray = rootObject.getJSONArray("events");

次のその配列から1つずるJSONObjectを取り出して次はタイトルの要素を取得します。
配列でなければgetJSONObjectメソッドで取得します。

                for (int i = 0; i < eventArray.length(); i++) {
                    JSONObject jsonObject = eventArray.getJSONObject(i);
                    Log.d("JSONSampleActivity", jsonObject.getString("title"));
                }

これでログにタイトルが表示されます。


関連する記事:

Sponsored Link

1 Comment

技術書新刊 発売中

アンドロイドアカデミアには、CIやテスト、互換検証など実務に生きるノウハウをあつめています

技術書新刊 発売中

Android Next!はAndroid 7.0に対応したはじめての技術書です!


The Web Explorer 2はCSSの中央寄せやWebAudioなど未来を読み解く一冊です


Revised TypeScript in DefinitelylandはTypeScript 2.0(β)に対応した解説書です。インストールから型定義まで幅広くサポートしています


技術書をかこう!はエンジニアらしい執筆環境を構築、HowTo本です