处理JSONArray时如何修复ClassCastException异常?
修复JSONArray遍历中的ClassCastException问题
错误原因
- 原代码错误地将
JSONArray强制转换为Map<Integer, String>,org.json.JSONArray并非java.util.Map的子类,这种强转必然触发ClassCastException。 - 使用
Collectors.toSet()会破坏遍历顺序,因为Set集合不保证元素的有序性,不符合按顺序遍历的需求。
修复后的代码
JSONArray txnHashList = // 初始化JSONArray的逻辑 // 按顺序遍历JSONArray,将元素收集为有序的List List<JSONObject> jsonObjectList = IntStream.range(0, txnHashList.length()) .mapToObj(txnHashList::getJSONObject) .collect(Collectors.toList()); // List本身实现了Iterable接口,可直接作为Iterable使用 Iterable<JSONObject> jsonObjects = jsonObjectList;
补充说明
- 直接调用
JSONArray.length()获取元素个数,无需强转其他类型。 - 如果不需要额外的List集合,也可以直接基于IntStream构建Iterable:
Iterable<JSONObject> jsonObjects = () -> IntStream.range(0, txnHashList.length()) .mapToObj(txnHashList::getJSONObject) .iterator();
内容的提问来源于stack exchange,提问作者Raju Gupta
相关产品推荐
相关产品推荐

