You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android中JSON解析报错求解:如何正确解析指定嵌套JSON数据

解决Android中JSON解析的JSONException问题

我来帮你搞定这个JSON解析的问题!你遇到的JSONException主要有两个原因,咱们一步步解决:

1. 先修正JSON格式的错误

你提供的JSON末尾多了一个无效的分号;,这会直接导致解析失败。修正后的正确JSON应该是:

{"boh" : { "-LBktL2BIRnG6yZPzX9M" : { "address" : "Улаанбаатар", "firstname" : "Болд", "floatt" : "9", "lastname" : "Бат ", "title" : "улсын начин" }, "-LBktTUZMDLqkoMR49Gv" : { "address" : "Улаанбаатар", "firstname" : "Эрдэнэ", "floatt" : "", "lastname" : "Болд", "title" : "залуу бөх" }, "-LBkt_OIvRGD-r_L40EH" : { "address" : "Улаанбаатар", "firstname" : "Нямхүү", "floatt" : "5", "lastname" : "Буянжаргал", "title" : "улсын заан" } } }

2. 修正解析逻辑的错误

你代码里的核心问题是:"boh"对应的是一个JSONObject,而不是JSONArray。JSON里用{}包裹的是对象,用[]包裹的才是数组。你之前用getJSONArray("boh")去获取,自然会抛出异常。

正确的做法是先拿到boh对应的JSONObject,然后遍历它的所有键(那些类似-LBktL2BIRnG6yZPzX9M的字符串),逐个取出每个子对象:

try {
    JSONObject obj1 = new JSONObject(jsonString);
    // 获取boh对应的JSONObject,而不是JSONArray
    JSONObject bohObj = obj1.getJSONObject("boh");
    // 获取所有键的迭代器
    Iterator<String> keys = bohObj.keys();
    
    while (keys.hasNext()) {
        String key = keys.next();
        // 遍历每个用户对象
        JSONObject userObj = bohObj.getJSONObject(key);
        
        // 提取字段
        String address = userObj.getString("address");
        String firstname = userObj.getString("firstname");
        String floatt = userObj.getString("floatt");
        String lastname = userObj.getString("lastname");
        String title = userObj.getString("title");
        
        // 这里可以添加你的业务逻辑,比如打印数据或者存入集合
        Log.d("JSON解析结果", String.format("姓名:%s %s,地址:%s,职位:%s", firstname, lastname, address, title));
    }
} catch (JSONException e) {
    e.printStackTrace();
    // 这里可以添加解析失败后的处理逻辑,比如提示用户
}

额外提醒

  • 注意floatt字段可能是空字符串,解析时如果需要转成数字,要先判断是否为空,避免抛出NumberFormatException
  • 建议在解析时添加异常捕获,避免程序崩溃

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

火山引擎 最新活动