Android でJSON

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です