我正在尝试使用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获得纬度。我怎样才能做到这一点。??
答案 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"));
}
}
}