2011-08-18 6 views
6

JSONObjectの私のコードの抽出結果、しかし、時には、私の値は1に始まらない、と私はそのようなエラーがある場合:テストgetJSONArrayがnullであるかない

org.json.JSONException: No value for 1 

マイコード:

JSONObject obj = new JSONObject(result); 
     for(int i=1;i<=14;i++) { 

      JSONArray arr = obj.getJSONArray(""+i); 
     extraction(arr, i); 
     } 

オブジェクトコード(i)が存在するかどうかを抽出する前にテストします。どのように私はこれを行うことができますか?

+0

私は間違っているかもしれないが、それは、ゼロベースのインデックスではないでしょうか? –

答えて

12

obj.optJSONArray(name)名前が存在しない場合、応答はnullになります。

JSONObject obj = new JSONObject(result); 
    for(int i=1;i<=14;i++) { 

     JSONArray arr = obj.optJSONArray(""+i); 
     if(arr != null) { 
       extraction(arr, i); 
     } 
    } 
+0

この行:JSONArray arr = obj.optJSONArray( "" + i); はエラーの原因となり、コードを停止します。それは "if"に到着することはありません。 nullの場合はどうすればテストできますか? – toshiro92

+4

getJSONArrayとoptJSONArrayの違いを理解する必要があります。キーが存在しない場合、最初のものはクラッシュし、2番目のものはnullを返します。これはテストできます。 – njzk2

+0

@ njzk2は右 – Kevin

3

ドキュメントに示されているように使用JSONObject.optJSONArray(key).

、キーが存在しない場合にはnullを返します。

また、JSON構造が奇妙なようです。なぜあなたはオブジェクト内に数値順キーを持っていますか?配列ではないはずですか?

+0

私のコードの特殊性、私はデータベース内のデータを取得するintが必要です – toshiro92

0

JSONArrayの戻り値をチェックするために.length()を使用することはできません。 使用.isNull( "XXX")の代わりに.LENGTHの()、例は以下の通りです:

JSONArray magazineLove = null; 
if(!socialBook.getJSONObject(i).isNull("MagazineLove")) 
{ 
    magazineLove = socialBook.getJSONObject(i).getJSONArray("MagazineLove");     
} 

Aey.Sakon

関連する問題