如何便捷拆分javax.json包中的JsonArray?不可使用第三方包
拆分javax.json.JsonArray的便捷方案
嗨,我完全懂你想要的那种简洁拆分JsonArray的需求——就像示例里array1.split(2,5)那样直接根据索引切分,但可惜javax.json标准库本身并没有内置这样的split方法。不过咱们可以自己封装一个工具方法,把遍历+构建的逻辑藏起来,用起来就跟原生方法一样方便,而且完全不用依赖第三方库。
封装工具方法
咱们可以写一个静态工具类,把拆分逻辑封装进去,还能顺便处理一些边界情况(比如索引越界、起始索引大于结束索引之类的问题):
import javax.json.JsonArray; import javax.json.JsonArrayBuilder; import javax.json.Json; public class JsonArrayUtils { /** * 拆分JsonArray,获取从startIndex(包含)到endIndex(不包含)的子数组 * @param source 源JsonArray * @param startIndex 起始索引(包含) * @param endIndex 结束索引(不包含) * @return 拆分后的新JsonArray * @throws IllegalArgumentException 当索引不合法时抛出 */ public static JsonArray slice(JsonArray source, int startIndex, int endIndex) { // 先做边界校验 if (source == null) { throw new IllegalArgumentException("源JsonArray不能为null"); } int size = source.size(); if (startIndex < 0 || startIndex >= size) { throw new IllegalArgumentException("起始索引超出范围: " + startIndex); } if (endIndex < startIndex || endIndex > size) { throw new IllegalArgumentException("结束索引超出范围: " + endIndex); } // 构建新的JsonArray JsonArrayBuilder builder = Json.createArrayBuilder(); for (int i = startIndex; i < endIndex; i++) { builder.add(source.get(i)); } return builder.build(); } }
使用示例
就像你想要的那样,调用这个工具方法就可以轻松拆分数组了:
JsonArray array1 = getJsonArrayOfSize(10); // 获取索引2、3、4对应的元素(因为endIndex是5,不包含) JsonArray array2 = JsonArrayUtils.slice(array1, 2, 5);
为什么只能这么做?
因为javax.json中的JsonArray是不可变对象,一旦创建就不能修改,所以要得到新的子数组,必须通过JsonArrayBuilder来逐个添加元素——这一步遍历是绕不开的,但把它封装成工具方法后,你就不用每次都写重复的遍历代码啦。
内容的提问来源于stack exchange,提问作者Loay
相关产品推荐
相关产品推荐

