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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:31:49