You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Java:RecyclerView中获取含嵌套数组的JSONObject数据失败求助

解决JSON解析中"answer_details"找不到的问题

问题场景

从API获取JSON数据并在RecyclerView展示时,解析抛出JSONException: No value for answer_details错误。

JSON数据示例

{"data": [{"question_id": 1,"sender_id": 27,"receiver_id": 14,"sender_time": "2022-12-30 06:11:28","question": "from user 30-12-2022","answer_details": [{"answer": "from ADMIN 30-12-2022","answer_id": 1,"isAdmin": true},{"answer": "from Users Again ","answer_id": 1,"isAdmin": false}],"sender_name": "Rahul","rating": 0,"subject": "Study","subject_id": 0,"receiver_name": "xcft Nth"}],"message": "Chat getting successfully","status": 200}

出错代码

JSONArray dataArray = jsonObject.getJSONArray("data");
for (int i = 0; i < dataArray.length(); i++) {
    JSONObject o = new JSONObject(dataArray.get(i).toString());
    listOf_users_models.add(new ListOf_Users_Model(o.getInt("sender_id"),o.getInt("receiver_id"),o.getInt("question_id"),o.getString("sender_time"),o.getString("sender_name"),o.getString("subject"),o.getString("receiver_name"),o.getString("question")));
    // 错误行
    JSONArray dataArray2 = jsonObject.getJSONArray("answer_details");
    for (int ii = 0; ii < dataArray2.length(); ii++) {
        Log.d("dataArray2",dataArray2.toString());
        JSONObject o2 = new JSONObject(dataArray2.get(ii).toString());
        listOf_users_models.add(new ListOf_Users_Model(o2.getString("answer"),o2.getInt("answer_id"),o2.getBoolean("isAdmin")));
    }
}

错误信息

W/System: A resource failed to call close. 
W/System.err: org.json.JSONException: No value for answer_details
W/System.err:     at org.json.JSONObject.get(JSONObject.java:398)
W/System.err:     at org.json.JSONObject.getJSONArray(JSONObject.java:593)

错误原因

answer_details数组是嵌套在data数组的每个子JSONObject中的,而代码里错误地从根JSONObject(jsonObject)中获取这个数组,根对象中不存在该字段,因此抛出找不到值的异常。

修正后的代码

将获取answer_details的对象从根jsonObject改为当前循环的子对象o即可:

JSONArray dataArray = jsonObject.getJSONArray("data");
for (int i = 0; i < dataArray.length(); i++) {
    JSONObject o = new JSONObject(dataArray.get(i).toString());
    listOf_users_models.add(new ListOf_Users_Model(o.getInt("sender_id"),o.getInt("receiver_id"),o.getInt("question_id"),o.getString("sender_time"),o.getString("sender_name"),o.getString("subject"),o.getString("receiver_name"),o.getString("question")));
    // 修改这里:从当前子对象o中获取answer_details
    JSONArray dataArray2 = o.getJSONArray("answer_details");
    for (int ii = 0; ii < dataArray2.length(); ii++) {
        Log.d("dataArray2",dataArray2.toString());
        JSONObject o2 = new JSONObject(dataArray2.get(ii).toString());
        listOf_users_models.add(new ListOf_Users_Model(o2.getString("answer"),o2.getInt("answer_id"),o2.getBoolean("isAdmin")));
    }
}

内容的提问来源于stack exchange,提问作者Mediad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:05:40