Android でJSON
JSONは javascript Obuject Notation の略
javascript で使われるデータ表記をモデルとした
データ記述方法のこと
これは成魚のための文字が少なく
データが比較的軽量なので
多くのAPIで使われる
例のソースにすると
{
“dataA”:”data1″,
“dataB”:”data2″,
“dataC”:{
“dataC-1″:”dataC”,
“dataC-2″:”dataD”
}
}
というようにペアになっていて階層にすることも可能
次に。JSONオブジェクト
JSON形式のデータファイルを扱うにはJSONObuject を使う
ソースにすると
String text = “{“+
“‘nodeA’ : ‘nodeA-data’,”+
“‘nodeB’ : ‘nodeB-data'”+
“}”;
JSONObject json_data = new JSONObject(text);
これでJSONObuject にしている
そして
JSONオブジェクトから値を取り出すには
getXXX() という形のメソッドを使う
これは型により変わる
大抵の場合なら string 形式なので
getString()になる
この変換はAPI使うなら必須かも
ソースにすると
String text = “{“+
“‘nodeA’ : ‘nodeA-data’,”+
“‘nodeB’ : ‘nodeB-data'”+
“}”;
JSONObject json_data = new JSONObject(text);
で text という JSONオブジェクトを作成している
そしてこれから値を取得する
string result = json_data.getString(“nodeA”);
これで
値として
nodeA-data
が
result に格納される
これはJSONが
キー:値
というよく見る組み合わせで管理しているからだ
つまり、getXXX() でキーを取得すれば
値を格納することができるわけだ
さて、ここまではよくあるやり方
実際にAPIを使うときには、ほぼ確実に階層データになっている
階層構造のあるデータの操作が必要になる
改造構造のあるJSONデータを扱うには
取得した JSONObject のgetJSONObject() を使うことになる
ソースにすると
まず
String text = “{“+
“‘nodeA’ : ‘nodeA-data’,”+
“‘nodeB’ : ‘nodeB-data’,”+
“‘nodeC’: “+ “{” +
“‘nodeC-A’ :+’data1′,”+
“‘nodeC-B’:’data2′”+
“}”+
“}”;
これで階層構造のJSONを変数 text に格納
次に
JSONOBject json_data = new JSONOBject(text);
として
json_data に変換したデータを格納する
ここまではほとんど同じ
次に階構造のあるJSONを取得する
JSONbject inner = json_data.getJSONObuject(“nodeC”);
まずは複数格納している上のものを取得する
次に
String result = inner.getString(“nodeC-A”);
とすれば
nodeC-A の中身の data1 が取得できる
つまり
一度上のものを取得しておけば
あとは別の変数に
getXXX() でデータを引っ張ってくことができる
PHPで
$result->item
というように階層をたどるのと同じ要領になる
そして、もう一つよく使うのが配列が含まれるデータの操作について
基本的に検索結果とかだとほぼ配列を使うことになる
配列が含まれるJSONデータは
JSONObuject の getJSONArray() を使うことで取得する
ソースにすると
String text =”{“+
“‘nodeA’ : ‘nodeA-data’,”+
“‘nodeB’ : ‘nodeB-data’,”+
“‘nodeC’ : ‘[‘A’,’B’,’C’]”+
“}”;
として text にデータを格納
次にect
JSONObject json_data = new JSONObject(text);
でJSONデータにする
ここから配列として取り出したいので
JSONArray inner = json_data.getJSONArray(“nodeC”);
で配列 nodeC を inner に格納
そして代入するための文字列を
StringBuilder string = new StringBuilder();
で用意して
for(int i=0;i