2013-09-27 56 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); 

        } 

       } 
相关问题