jsonのレスポンスデータの解析について

1,882 views
Skip to first unread message

eijixAG

unread,
Apr 20, 2011, 1:23:06 AM4/20/11
to 日本Androidの会
こんにちは。
eijixAGと申します。

json形式のレスポンスデータの解析について、つまづいております。
getStringなどで、"name"に対する値を取得できますが、
通常時レスポンスデータに含まれているはずのnameがなかった場合、エラーになると思います。
具体的なコードを以下に。
========
{"data": {
"member": [
{"id": "0001", "name": "aaaa"},
{"id": "0002", "name": "bbbb", "thumb": "xxxx.jpg"},
{"id": "0003", "name": "cccc", "thumb": "oooo.jpg"}
]}
}

try {
JSONObject jObject = new JSONObject(json);
JSONObject data = jObject.getJSONObject("data");
JSONArray member = data.getJSONArray("member");
for (int i=0; i<member.length(); i++) {
JSONObject person = member.getJSONObject(i);
int id = person.getInt("id");
String name = person.getString("name");
String thumb = person.getString("thumb");
}
} catch (JSONException e) {
// パースエラーなど
e.printStackTrace();
}
========
上段のデータが、「json」に入っており、
下段のコードで解析していくわけですが、
このコードですと、【id=0001】の括りで「thumb」という項目がないので、解析できずエラーになってしまいます。

この時、無いなら無いでそれは読み飛ばし、次の項目の解析に移るようにするには、どうしたら良いのでしょうか?

小浦 新市

unread,
Apr 20, 2011, 1:45:20 AM4/20/11
to android-g...@googlegroups.com
eijixAG様

小浦と申します。
ちょうど私も今回の仕事でjsonデータを扱っておりました。

「thumb」という項目が含まれているかを
JSONObjectクラスのhasメソッドでチェックすることができます。
以下のようなif文を加えればエラーにならず、
読み飛ばしが可能になるかと思います。

if(person.has("thumb")){


String thumb = person.getString("thumb");
}

一度お試しいただければと思います。

eijixAG

unread,
Apr 20, 2011, 2:20:16 AM4/20/11
to 日本Androidの会
eijixAGです。

小浦様へ

返信ありがとうございます。

hasメソッドでのチェックロジックを追加して、エラーを回避できました。

書籍や、ネットのいろんな記事を参照しても、こういうイレギュラーな感じの対処法が見つからずに困っていました。

助かりました。ありがとうございました。
失礼いたします。

eijixAG

dmp

unread,
Apr 20, 2011, 2:50:22 AM4/20/11
to 日本Androidの会
eijixAG様

dmpです。

JSONObject#optString(String name) や JSONObject#optString(String name,
String fallback) などのメソッドは
nameを名前に持つ要素がない場合でもJSONExceptionをはきません。
これらメソッドがAPI Level 1で用意されていますので使いやすいかと思います。

http://developer.android.com/reference/org/json/JSONObject.html

eijixAG

unread,
Apr 20, 2011, 8:40:37 PM4/20/11
to 日本Androidの会
eijixAGです。

dmp様

返信ありがとうございます。
なるほど。
そういったメソッドも用意されてるのですね。
勉強不足でした。

アドバイス、ありがとうございました。
存在チェックをするhasメソッドと、状況に応じて使い分けたいと思います。

失礼いたします。

eijixAG
Reply all
Reply to author
Forward
0 new messages