【问题标题】:How to fix JSONObject cannot convert to JSONArray如何修复 JSONObject 无法转换为 JSONArray
【发布时间】:2019-09-25 00:14:22
【问题描述】:

我尝试将 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。如何实现。

【问题讨论】:

  • 我是如何解决这个问题的 data 应该是一个 json 数组 ([...]) 而不是 json 对象 ({...}) ...(或者你应该解析它作为对象而不是数组)

标签: android json arraylist response


【解决方案1】:

请尝试以下代码

 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);
    }
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      检查此解决方案

      //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));
      }
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多