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




