You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何便捷拆分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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:02:30