AndroidでJSONを使う

シェアする

JSONは文字や数値などデータを一つにまとめることができ、パースもしやすくとても便利です。
またほとんどの言語で扱える形式のため、データ通信で使うのに適しています。
今回はAndroidでJSONを扱うためのクラスについてまとめました。

スポンサーリンク

JSONとは

JSONは人が容易に読み書きができ、言語ごとのパースも簡単に行なえるデータ形式です。
連想配列と配列の二つで表されます。

連想配列は名前と値によって次のように要素を表します。

{"名前1":値1, "名前2":値2}

全体を{}(中括弧)で囲み、名前と値を:(コロン)で区切ります。要素は,(カンマ)で区切ります。
名前は文字列型でなければなりません。
値の取得や追加には名前を使います。

配列で要素を表す場合は値のみを[](大括弧)で囲み、要素を,(カンマ)で区切ります。

[値1,値2,値3,]

値の取得には要素番号を使います。

値には文字列、数値、BOOL値、オブジェクトなど様々なものを指定できます。
サンプルを用意しました。

このように、JSONデータの中にJSONや配列が含まれていても問題ありません。
この場合、2行目の”string”が表すのが”名前”という文字列になります。

ソース

こちらが今回の全体コードです。
開発環境はAndroid Studio3.0.1です。

実行結果では次のようにログが出力されます。

D/sample: JSONObject:{"int":30,"string":"文字列","bool":true}
D/sample: toStringでの展開:{"int":30,"string":"文字列","bool":true}
D/sample: intの取得:30
D/sample: JSONArray:[100,"strong",false]
D/sample: Arrayの追加:{"int":30,"string":"文字列","bool":true,"arr":[100,"strong",false]}
D/sample: piyoがありません
D/sample: end try-catch

JSONObject

JSONObjectは連想配列のJSONです。
次の二つのインポートが必要です。

import org.json.JSONObject;
import org.json.JSONException;

JSONObjectへのデータの追加と取得はtry-catch文の中で行う必要があります。

JSONObject json = new JSONObject();
try{
    // ここに処理を書く
}catch(JSONException e){
    e.printStackTrace();
}

データの追加は次のように書きます。

JSONObject.put("名前",値);

次のように書くと連続して追加できます。

JSONObject.put("名前1",値)
    .put("名前2",値)
    .put("名前3",値);

データの取得にはgetを使います。
取得したい型によって呼び出し方が変わります。
また独自のクラスを取得する場合にはキャストを使います。

int i = JSONObject.getInt("名前");
JSONObject j = JSONObject.getJSONObject("名前");
独自のクラス c = (独自のクラス)JSONObject.get("名前");

JSONObjectでは配列は扱えないため注意が必要です。

JSONArray

JSONの配列を扱う場合に使います。
JSONArrayを使うには次のインポートが必要です。

import org.json.JSONArray;

JSONArrayは名前の代わりに要素番号を使います。

JSONArray array = new JSONArray();
array.put(100)
     .put("文字列");
int i = array.getInt(0);

データを一つにまとめる

toStringを使うことでデータを一つの文字列に変換することができます。

String obj = JSONObject.toString();
String arr = JSONArray.toString();

これによりデータの送信や保存時の処理を一括して行うことができます。
またこのまとめたデータをJSONObjecに戻す際は次のようにします。

String strObj = JSONObject.toString();
JSONObject obj = new JSONObject(strObj);

String strArr = JSONArray.toString();
JSONArray arr = new JSONArray(strArr);

データの確認

受け取ったJSONデータを使おうとした時、必要なデータがないとアプリによっては動作を停止することがあります。
それを防ぐために、受け取ったデータが存在するか確認する必要があります。
今回はJSONObject.has()を使いましたが、コードによっては別の方法で確認するかもしれません。

JSONObject receive = new JSONObject();  
receive.put("hoge","hoge")  
    .put("huga","huga");
if(receive.has("piyo")){  
    // piyoが存在する時の処理  
}else{  
    // piyoが存在しない時の処理  
}

まとめ

このように、AndroidでもJSONを使うことができます。
JSONObjectやJSONArrayを使えば、アプリがサーバとの通信をする時にデータのやりとりが簡単になります。

参考

エンジニア1年目です。
日々勉強したことをまとめていきたいと思います。

スポンサーリンク

シェアする

フォローする