JSON (JavaScript Object Notation) と言えば、軽量で人にもコンピュータにも扱いやすいデータ交換フォーマットです。JavaScriptの表記法をベースとしているようですが、様々なソフトやプログラム言語で幅広く使われています。
そんなJSONをAndroidから扱う方法についてまとめてみます。
JSON形式データからオブジェクトに変換
AndroidではJSON形式のデータを扱う為のクラス org.json.JSONObject と org.json.JSONArray が用意されています。
JSONObjectクラス
JSONObjectクラスのコンストラクタへJSON形式のテキストを渡します。
その後、getString や getDouble などのメソッドにキー名を渡して呼び出せば対応する値が取得できます。
入れ子になっている場合は getJSONObjectメソッドを使う事で、子要素の値を取得できます。
値が配列の場合は getJSONArrayメソッドを使って取得します。
※クラスはJSONExceptionをスローする可能性があるので注意しましょう
例)
try { JSONObject json = new JSONObject("{\"ID\":\"001\",\"Name\":\"アンドロイド\"}"); String id = json.getString("ID"); String name = json.getString("Name"); } catch (org.json.JSONException e) { }
JSONArrayクラス
データが配列の場合はJSONArrayクラスを使います。
JSONArrayクラスのコンストラクタへJSON形式のテキストを渡します。
length メソッドで配列の要素数を取得する事が出来ます。
getJSONObject や getDouble などのメソッドに配列の要素番号を渡せば対応する値が取得できます。
※クラスはJSONExceptionをスローする可能性があるので注意しましょう
例)
try { JSONArray jarray = new JSONArray("[{\"ID\":\"001\",\"Name\":\"あんどろいど\"},{\"ID\":\"002\",\"Name\":\"あいふぉん\"}]"); for (int i = 0; i < jarray.length(); ++ i) { JSONObject json = jarray.getJSONObject(i); String id = json.getString("ID"); String name = json.getString("Name"); : : } } catch (org.json.JSONException e) { }
オブジェクトからJSON形式データに変換
JSON形式のデータを作成したい場合も org.json.JSONObject と org.json.JSONArray クラスを使います。
toString()で変換
JSONObjectクラスと JSONArrayクラスのどちらの場合も、putメソッドで値をセットします。
データをセットしたら toString()メソッドでJSON形式のデータが取得できます。
例)
try { org.json.JSONObject json1 = new org.json.JSONObject(); json1.put("ID", "001"); json1.put("Name", "あんどろいど"); org.json.JSONObject json2 = new org.json.JSONObject(); json2.put("ID", "002"); json2.put("Name", "あいふぉん"); org.json.JSONArray jary = new org.json.JSONArray(); jary.put(json1); jary.put(json2); String data = jary.toString(); //結果は以下の通り //[{"ID":"001","Name":"あんどろいど"},{"ID":"002","Name":"あいふぉん"}] } catch (org.json.JSONException e) { }
toString(int indentSpaces)で変換
機械的に処理するなら toString()メソッドで問題ありませんが、人の目で見ると少し見づらいです。
そんな時は toString(int indentSpaces)メソッドを使いましょう。
インデントを使って見やすく出力してくれます。
try { org.json.JSONObject json1 = new org.json.JSONObject(); json1.put("ID", "001"); json1.put("Name", "あんどろいど"); org.json.JSONObject json2 = new org.json.JSONObject(); json2.put("ID", "002"); json2.put("Name", "あいふぉん"); org.json.JSONArray jary = new org.json.JSONArray(); jary.put(json1); jary.put(json2); String data = jary.toString(4); //結果は以下の通り //[ // { // "ID":"001", // "Name":"あんどろいど" // }, // { // "ID":"002", // "Name":"あいふぉん" // } //] } catch (org.json.JSONException e) { }
コメントをお書きください