如何修复JSONObject无法转换为JSONArray

时间:2019-05-07 10:42:06

标签: android json arraylist response

我试图将JSONObject转换为JSONArray,并导致typeMismacth错误。我试图弄清楚发生了什么,但我坚持了下来。

private void prepareReportList(String reportList) {
    try {
        JSONObject task_type_list = null;
        try {
            task_type_list = new JSONObject(reportList);
            JSONArray data = task_type_list.getJSONArray("data");

            int length = data.length();
            for (int i = 0; i < length; i++) {
                addReportData(data.getJSONObject(i));
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
    } finally {
        setDataValuesToView(caregiverReportList);
    }
}

这是我的代码。

,响应返回此输出,

{
    "data":{
        "c_correctCount":"0",
        "c_total":"0",
        "r_correctCount":"0",
        "r_total":"0",
        "p_correctCount":"0",
        "p_total":"0",
        "i_correctCount":"0",
        "i_total":"0"
    }
}

我如何解决这个问题。我需要将响应转换为JSONArray。如何实现它。

3 个答案:

答案 0 :(得分:2)

请尝试以下代码

 private void prepareReportList(String reportList) {
    try {
        JSONObject task_type_list = null;
        try {
            task_type_list = new JSONObject(reportList);

            JSONObject jObjData = task_type_list.getJSONObject("data");
            Iterator iterator = jObjData.keys();

            while (iterator.hasNext()) {
                try {
                    String key = (String) iterator.next();
                    JSONObject obj = jObjData.getJSONObject(key);
                    addReportData(obj);
                } catch (Exception e) {
                    e.getStackTrace();
                }

            }


        } catch (JSONException e) {
            e.printStackTrace();
        }
    } finally {
        setDataValuesToView(caregiverReportList);
    }
}

答案 1 :(得分:1)

您不能将 data 元素视为JSONArray,因为它清楚地表明 data 是无序键,带有花括号{}的值对的集合。

如果您的最终目标是将共享相同字母前缀的每两对分组为一个JSONObject并将它们包装在JSONArray中,那么您必须手动进行

答案 2 :(得分:1)

检查此解决方案

//this is the jsonobject which is getting from server
JSONObject dataObj= json.getJSONObject("data"); 
Iterator x = dataObj.keys();

//here we are creating jsonArray object
JSONArray jsonArray = new JSONArray();

//by looping Iterator converting jsonobject to jsonarray
while (x.hasNext()){
String key = (String) x.next();
jsonArray.put(dataObj.get(key));
}

如有疑问,请在评论部分继续编码:)