如何将JSONArray转为多维ArrayList?并处理嵌套JSON字符串转换
解决方案
你需要先把最后那个字符串形式的JSON数组解析成真正的JSONArray,再逐层转换为ArrayList<ArrayList<String>>,具体实现如下:
步骤说明
- 提取目标字符串:从已有的
arr中获取第一个JSONArray,再取出它的最后一个元素(类型为String)。 - 解析字符串为
JSONArray:利用JSONArray构造方法,把符合JSON格式的字符串转成可操作的JSONArray。 - 遍历转换为多维
ArrayList:外层遍历每个子JSONArray,内层遍历每个字符串元素,分别存入对应的ArrayList。
完整代码示例
try { JSONArray array = new JSONArray(response.body()); List<JSONArray> arr = new ArrayList<>(); for (int i = 0; i < array.length(); i++) { arr.add(array.getJSONArray(i)); } Log.d("arr", arr.toString()); // 处理最后一个元素转换为多维ArrayList if (!arr.isEmpty()) { JSONArray firstInnerArray = arr.get(0); if (firstInnerArray.length() > 0) { // 取出目标字符串 String targetStr = firstInnerArray.getString(firstInnerArray.length() - 1); // 解析为JSONArray JSONArray targetJsonArray = new JSONArray(targetStr); // 初始化多维集合 ArrayList<ArrayList<String>> multiList = new ArrayList<>(); // 遍历外层数组 for (int j = 0; j < targetJsonArray.length(); j++) { JSONArray innerJsonArr = targetJsonArray.getJSONArray(j); ArrayList<String> innerList = new ArrayList<>(); // 遍历内层数组,收集字符串元素 for (int k = 0; k < innerJsonArr.length(); k++) { innerList.add(innerJsonArr.getString(k)); } multiList.add(innerList); } // 验证转换结果 Log.d("multiList", multiList.toString()); } } } catch (JSONException e) { throw new RuntimeException(e); }
注意事项
- 确保目标字符串是标准JSON格式:如果字符串里的元素没有双引号(比如你示例中的
shhs),解析会失败,需要后端返回合法的JSON格式字符串。 - 异常处理:解析字符串为
JSONArray时可能抛出JSONException,需统一捕获处理。
内容的提问来源于stack exchange,提问作者user21917572
相关产品推荐
相关产品推荐

