2013-09-27 30 views
9

我收到錯誤org.json.JSONException:爲PROJECT_NAME沒有價值這是我的JSON錯誤org.json.JSONException:爲PROJECT_NAME沒有價值這是我的JSON

{"PROJECTS":[ 
     { 
      "PROJECT_NUMBER": "2062", 
      "PROJECT_NAME": "OPW 51183" 
     }, 
     { 
      "PROJECT_NUMBER": "404", 
      "PROJECT_NAME": "404" 
     }, 
     { 
      "PROJECT_NUMBER": "2125", 
      "PROJECT_NAME": "OPW 50016" 
     }, 
     { 
      "PROJECT_NUMBER": "" 
     }, 
     { 
      "PROJECT_NUMBER": "2130", 
      "PROJECT_NAME": "OPW 51151 63rd & Shirley SEW S" 
     }, 
     { 
      "PROJECT_NUMBER": "2159", 
      "PROJECT_NAME": "OPW 51226" 
     } 
     ] 

    } 

和鱈魚是:

for (int i = 0; i < innerProjectarray.length(); i++) 
    { 

JSONObject obj=innerProjectarray.getJSONObject(i); 
String projectnumber1=obj.getString("PROJECT_NUMBER"); 
String projectname1=obj.getString("PROJECT_NAME"); 
     } 

有沒有什麼辦法可以找到問題的關鍵,如果不存在,那麼關鍵的NP需要獲得價值OD特定字符串幫我感謝

+0

你不會爲參數中獲得的價值,同時獲得來自服務器端 – harikrishnan

+0

響應如何分析這種類型的JSON我有大JSON,但我在這裏引用了一小部分 –

+0

上面的代碼就像,json響應是必須的。雖然獲得JSON響應一段時間,關鍵的價值參數本身不存在..那麼多時間這個錯誤肯定會來.. – harikrishnan

回答

40

使用has來檢查Json中是否存在密鑰。如果此對象具有名稱映射,則返回true。

for (int i = 0; i < innerProjectarray.length(); i++) { 

    JSONObject obj = innerProjectarray.getJSONObject(i); 
    if (obj.has("PROJECT_NUMBER")) { 
     String projectnumber1 = obj.getString("PROJECT_NUMBER"); 
    } 

    if (obj.has("PROJECT_NAME")) { 
     String projectname1 = obj.getString("PROJECT_NAME"); 
    } 
} 

的另一種方法是使用optString如果它存在,如果需要的話它強迫返回按名稱映射的值。如果不存在這樣的映射,則返回空字符串。

for (int i = 0; i < innerProjectarray.length(); i++) { 

    JSONObject obj = innerProjectarray.getJSONObject(i); 

    String projNum = obj.optString("PROJECT_NUMBER"); 
    String projName = obj.optString("PROJECT_NAME"); 
    // and use both values. 
} 
+0

謝謝它的工作 –

+0

congs ...你做到了。並歡迎:) –

+0

我有問題,它有20000迭代它可以存儲在sqlite中,因爲它需要很多時間來存儲和獲取或任何值的建議? –

1
{ 
     "PROJECT_NUMBER": "" 
    }, 

這裏你只有「PROJECT_NUMBER」,因爲你有例外。嘗試找到一種方法來處理它。

+0

我知道,但如何解決這個問題? –

+0

你對服務器端負責嗎? –

+0

不,我不能在服務器中更改 –

0

您可以檢查,其中關鍵是存在,或不使用有()方法。下面 是你的代碼看起來象

for (int i = 0; i < innerProjectarray.length(); i++) 
    { 

    JSONObject obj=innerProjectarray.getJSONObject(i); 

    if(obj.has("PROJECT_NUMBER")) 
    { 
     Log.i("Project Number ",obj.getString("PROJECT_NUMBER")); 
    } 
    else 
    { 
     Log.i("Project Number ","No Such Tag as PROJECT_NUMBER"); 
    } 

    if(obj.has("PROJECT_NAME")) 
    { 
     Log.i("Project Name ",obj.getString("PROJECT_NAME")); 
    } 
    else 
    { 
     Log.i("Project Name ","No Such Tag as PROJECT_NAME"); 
    } 

} 

我希望上面的代碼可以幫助您解決您的問題

2

//因爲如果參數或變量不存在成JSON對象,它不會執行進一步的代碼和拋出異常所以它能夠更好地使用一樣:

try { 

      JSONObject data = coupon; 



       if(data.has("event_recurring_text")) { 

        if ("".equals(data.getString("event_recurring_text"))) { 

         bundle.putString("event_time", data.getString("event_recurring_text")); 

        } else { 

         bundle.putString("event_time", data.getString("event_time")); 
        } 
       } 
      }// end if 



     } catch (JSONException e) { 

      Log.i("Handler 4","JSONException: Handled");    
      e.printStackTrace(); 
     } 

//這裏data.has()方法檢查變量是否存在或不進oject

// vKj

0

我希望這個答案能夠幫助別人解決這個問題,在我的JSONarray名字裏有雙引號內的空格,所以空格考慮爲一個字符。這是一種API問題。更好的請求刪除空間,否則開發人員將受到影響。

"jobtype ": [ 
     { 
     "id": "1006", 
     "name": "Apprenticeship" 
     } 
    ] 

logcat的:異常org.json.JSONException:用於

0

爲(沒有值INT I = 0;我< innerProjectarray。長度();我++){

JSONObject jobject = innerProjectarray.getJSONObject(i); 
if (jobject .has("PROJECT_NUMBER")) { 
    String strnumber = jobject .getString("PROJECT_NUMBER"); 
} 

if (jobject .has("PROJECT_NAME")) { 
    String strname= jobject .getString("PROJECT_NAME"); 
} 

}

0

試試這個:

if (jsonObjectLeft.has("Left")) { 

        if (jsonObjectLeft.getJSONArray("Left") != null && 

jsonObjectLeft.getJSONArray("Left").length() > 0) { 

         jsonArrayLeft.put(jsonObjectLeft); 

         jsonObject.put("12", jsonArrayLeft); 

        } 

       } 
相關問題