获取没有值的JSONException

时间:2018-06-07 06:40:48

标签: android json android-volley android-json

我正在尝试使用volley解析android中的json响应。但我得到了一个json例外的最后一个没有值的例外。我能够解析当前对象但不能解析最后一个对象。  以下是json的回应。

{"status":false,"result":
[{"current": 
[{"Latitude":"19.1021","Longitude":"72.9153","Datetime":"2018\/01\/01 07:23:53"}, 
{"Latitude":"19.0766","Longitude":"72.9009","Datetime":"2018\/06\/05 00:57:49"}]}, 
{"lastcurrent": 
[{"Latitude":"19.1022","Longitude":"72.9152","Datetime":"2018\/01\/01 07:23:53"}, 
{"Latitude":"19.0766","Longitude":"72.901","Datetime":"2018\/06\/05 00:57:49"}  
]}]}

下面是使用volley解析json的android代码。

public void onResponse(String response) {

                        System.out.println("Response: "+response);

                        try{
                            jsonObject = new JSONObject(response);

                            jsonArray = jsonObject.getJSONArray("result");

                            String status = jsonObject.getString("status");
                            System.out.println("Status=="+status);
                            //System.out.println(jsonArray.length());
                            for (int i = 0; i<jsonArray.length(); i++){

                                jsonObject1 = jsonArray.getJSONObject(i);

                                jsonArray1 = jsonObject1.getJSONArray("current");
                                for (int j = 0; j<jsonArray1.length();j++)
                                {
                                    jsonObject2 = jsonArray1.getJSONObject(j);


                                    System.out.println("current == "+ jsonObject2.getString("Latitude") );


                                }


                                jsonArray2 = jsonObject1.getJSONArray("lastcurrent");
                                for (int k =0; k<jsonArray2.length();k++)
                                {
                                    jsonObject3 = jsonArray2.getJSONObject(k);

                                    System.out.println("last Current=="+jsonObject3.getString("Latitude"));
                                }

                            }
                        }catch (JSONException e){
                            e.printStackTrace();
                        }
                    }

Logcat错误:

06-07 12:05:57.023 17214-17214/com.abhi.smoothmapmarkers I/System.out: Status==false
current ==19.1021
current ==19.0766
06-07 12:05:57.024 17214-17214/com.abhi.smoothmapmarkers I/System.out: current ==19.1008
current ==18.9592
current ==19.0943
06-07 12:05:57.025 17214-17214/com.abhi.smoothmapmarkers W/System.err: org.json.JSONException: No value for lastcurrent

请帮帮我。感谢帮助。我想从lastcurrent获得纬度。我怎样才能做到这一点。??

3 个答案:

答案 0 :(得分:0)

您正在寻找一个不可用的数组,例如第一个对象中的lastcurrent和第二个对象中的current

在解析之前检查

if(jsonObject1.has("lastcurrent")){
    jsonArray1 = jsonObject1.getJSONArray("lastcurrent");
    ...
    ...

此检查也应该适用于current数组。

解决方案应该像这样

...
...
if(jsonObject1.has("current")){
    jsonArray1 = jsonObject1.getJSONArray("current");
    for (int j = 0; j<jsonArray1.length();j++)
    {
        jsonObject2 = jsonArray1.getJSONObject(j);
        System.out.println("current == "+ jsonObject2.getString("Latitude") );
    }
}

if(jsonObject1.has("lastcurrent")){
    jsonArray2 = jsonObject1.getJSONArray("lastcurrent");
    for (int k =0; k<jsonArray2.length();k++)
    {
        jsonObject3 = jsonArray2.getJSONObject(k);
        System.out.println("last Current=="+jsonObject3.getString("Latitude"));
    }
}
...
...

答案 1 :(得分:0)

Use .has(String) and .isNull(String) 

Like:

if (jsonObject1.has("lastcurrent") && !jsonObject1.isNull("lastcurrent")) {
        // Do something with Array
      }

答案 2 :(得分:0)

使用它像这样

它将适用于您

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

                JSONObject jsonObject1 = jsonArray.getJSONObject(i);
                if (i < 1) {
                JSONArray jsonArray1 = jsonObject1.getJSONArray("current");

                    for (int j = 0; j < jsonArray1.length(); j++) {
                        JSONObject jsonObject2 = jsonArray1.getJSONObject(j);
                        System.out.println("current == " + jsonObject2.getString("Latitude"));

                    }
                }
                if (i > 0) {
                    JSONArray jsonArray2 = jsonObject1.getJSONArray("lastcurrent");
                    for (int k = 0; k < jsonArray2.length(); k++) {
                        JSONObject jsonObject3 = jsonArray2.getJSONObject(k);

                        Log.e("Last current", "last Current==" + jsonObject3.getString("Latitude"));
                    }
                }

            }