无法将JSONObject转换为JSONArray

时间:2019-06-03 09:15:30

标签: android json

我正在使用android应用程序调用REST API,POST方法API的结果如下:

{
"Items": {
    "ap_id": "37",
    "ap_time_from": "14:28",
    "ap_time_to": "16:28",
    "patient_id": "153",
    "patient_name": "Nikhil",
    "patient_email": "a@a.com",
    "patient_location": "abc"
}                        }

使用以下命令将其转换为可读数据:

JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("Items");

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

 JSONObject object = jsonArray.getJSONObject(i);

DoctorModel doctorModel1 = new DoctorModel();
doctorModel1.setApp_id(object.getString("ap_id"));
doctorModel1.setStart_timing(object.getString("ap_time_from"));
doctorModel1.setEnd_timing(object.getString("ap_time_to"));
doctorModel1.setUser_id(object.getString("patient_id"));
doctorModel1.setUser_name(object.getString("patient_name"));
doctorModel1.setUser_mail(object.getString("patient_email"));
doctorModel1.setLocation(object.getString("patient_location"));
doctorModelList.add(doctorModel1); }

现在,当我尝试将其转换以便可以在回收站视图中显示结果时,出现以下错误:

org.json.JSONException: Value
{"ap_id":"37","ap_time_from":"14:28","ap_time_to":"16:28","patient_id":"153","patient_name":"Nikhil","patient_email":"a@a.com","patient_location":"abc"}
at Items of type org.json.JSONObject cannot be converted to JSONArray

我一直在使用相同的方法将JSON对象数据转换为JSON数组,但不确定我要去哪里。任何帮助将不胜感激,谢谢!

3 个答案:

答案 0 :(得分:1)

您需要在Items中将数组作为对象,如下所示:

{
"Items": 
    [
        {
        "ap_id": "37",
        "ap_time_from": "14:28",
        "ap_time_to": "16:28",
        "patient_id": "153",
        "patient_name": "Nikhil",
        "patient_email": "a@a.com",
        "patient_location": "abc"
        }
    ]                        
}

否则,将您的代码更改为支持单个对象而不是数组

JSONObject jsonObject = new JSONObject(response);
JSONArray object = jsonObject.JSONObject("Items"); 

答案 1 :(得分:0)

在当前响应中,Items的值具有JSON对象,而不是JSON数组。这就是为什么发生这种异常的原因。要将响应转换为数据模型,可以使用以下方法:

JSONObject jsonObject = new JSONObject(response);
JSONArray object = jsonObject.JSONObject("Items"); 

DoctorModel doctorModel1 = new DoctorModel();
doctorModel1.setApp_id(object.getString("ap_id"));
doctorModel1.setStart_timing(object.getString("ap_time_from"));
doctorModel1.setEnd_timing(object.getString("ap_time_to"));
doctorModel1.setUser_id(object.getString("patient_id"));
doctorModel1.setUser_name(object.getString("patient_name"));
doctorModel1.setUser_mail(object.getString("patient_email"));
doctorModel1.setLocation(object.getString("patient_location"));
doctorModelList.add(doctorModel1);

或者,如果您想从json获取数组,那么JSON将如下所示:

{
"Items": 
    [
        {
        "ap_id": "37",
        "ap_time_from": "14:28",
        "ap_time_to": "16:28",
        "patient_id": "153",
        "patient_name": "Nikhil",
        "patient_email": "a@a.com",
        "patient_location": "abc"
        }
    ]                        
}

希望您能理解问题。

答案 2 :(得分:0)

JSONArray jsonArray = jsonObject.getJSONArray(“ Items”); //由于您正尝试将JSONObject(“ Items”)转换为JSONArray,因此此行会出现异常。

您必须在响应中进行一些更改:1.如果要在响应中以数组形式返回“项目”。

{
"Items": [
    {
      "ap_id": "37",
      "ap_time_from": "14:28",
      "ap_time_to": "16:28",
      "patient_id": "153",
      "patient_name": "Nikhil",
      "patient_email": "a@a.com",
      "patient_location": "abc"
    }
  ]
}
  1. 如果您想像Response中的对象一样返回“ Items”,则必须像这样更改代码

JSONObject jsonObject = new JSONObject(response); JSONObject jsonObjectItem = jsonObject.getJSONObject("Items");

但是在第二种情况下,您无法以数组形式获得结果。