Android解析Django JsonResponse时出现解析错误求助
Android解析Django JsonResponse的问题解决办法
嘿,我看出来问题出在哪了——你拿到的JSON结构比你想的多一层,直接解析顶层对象肯定找不到你要的字段呀!
先帮你拆解下服务器返回的JSON结构:
{
"0": {
"pk": 41,
"fields": { ... },
"model": "Dashboard.specificnotification"
}
}
顶层JSON对象里只有一个键"0",你要的所有数据都在这个键对应的子对象里,你的代码只创建了顶层的JSONObject,却没深入到这一层,自然会抛出找不到目标字段的解析错误。
具体修复步骤:
- 第一步,先获取顶层对象,再取出
"0"对应的子对象:
JSONObject jsonObject = new JSONObject(response); // 取出键为"0"的子JSON对象,这才是包含你要的数据的对象 JSONObject notificationData = jsonObject.getJSONObject("0");
- 第二步,从子对象里提取数据:
你可以先拿到pk和model字段,再解析嵌套的fields对象:
// 提取基础字段 int pk = notificationData.getInt("pk"); String modelName = notificationData.getString("model"); // 解析fields里的详细内容 JSONObject fieldsObj = notificationData.getJSONObject("fields"); String heading = fieldsObj.getString("heading"); String notificationContent = fieldsObj.getString("notification"); String date = fieldsObj.getString("date"); int priority = fieldsObj.getInt("priority"); boolean hasRead = fieldsObj.getBoolean("has_read"); String actionUrl = fieldsObj.getString("action");
额外提醒:
如果服务器可能返回多条数据(比如键是"0"、"1"、"2"...),你可以用遍历的方式处理所有子对象:
try { JSONObject jsonObject = new JSONObject(response); // 获取所有顶层键的迭代器 Iterator<String> keyIterator = jsonObject.keys(); while (keyIterator.hasNext()) { String key = keyIterator.next(); JSONObject itemData = jsonObject.getJSONObject(key); // 这里重复上面的解析逻辑处理每条数据 } } catch (JSONException e) { e.printStackTrace(); // 记得捕获异常,避免APP崩溃,还可以给用户提示解析失败 }
内容的提问来源于stack exchange,提问作者magnum_skrattar
相关产品推荐
相关产品推荐

