如何修复 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 对象
AsyncTask #3 解析 JSON 对象时出错。字符串无法转换为 JSONObject
org.json.JSONObject$1 类型的值 null 无法转换为 JSONObject