如何修复 JSONObject 无法转换为 JSONArray

Posted

技术标签:

【中文标题】如何修复 JSONObject 无法转换为 JSONArray【英文标题】:How to fix JSONObject cannot convert to 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 对象 (...) ...(或者你应该解析它作为对象而不是数组) 【参考方案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));

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

【讨论】:

以上是关于如何修复 JSONObject 无法转换为 JSONArray的主要内容,如果未能解决你的问题,请参考以下文章

使用 json.simple 将字符串转换为 json 对象

如何在将jsonObject转换为模型对象时检测缺失的字段

AsyncTask #3 解析 JSON 对象时出错。字符串无法转换为 JSONObject

org.json.JSONObject$1 类型的值 null 无法转换为 JSONObject

解析JSON对象的AsyncTask#3错误。 String无法转换为JSONObject

无法解析 JSONArray 无法转换为 JSONObject