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

Groovy中如何将不可变JSONArray转为移除指定元素的新JSONArray?

处理不可变JSONArray移除范围元素的优雅方案

因为原JSONArray是不可变的,所以必须生成新数组,以下两种Groovy方案比手动遍历插入更简洁:

方案一:利用Groovy集合范围拼接(推荐)

Groovy支持对列表/数组直接使用范围操作,把原JSONArray转成可操作的列表后,直接拼接保留的前后两段,再转回JSONArray:

// 定义要移除的起始和结束索引(均为包含)
def startRemoveIdx = 5
def endRemoveIdx = 20

// 拆分并拼接保留的元素,再生成新的JSONArray
def retainedElements = jsonArray[0..<startRemoveIdx] + jsonArray[endRemoveIdx+1..-1]
def newJsonArray = new groovy.json.JsonArray(retainedElements)
// 如果使用的是org.json.JSONArray,替换为:
// def newJsonArray = new org.json.JSONArray(retainedElements)
  • 0..<startRemoveIdx 取原数组中从索引0到startRemoveIdx-1的所有元素
  • endRemoveIdx+1..-1 取原数组中从endRemoveIdx+1到最后一个元素的所有内容
  • 直接用+拼接两个片段,得到保留的元素列表,再实例化新的JSONArray即可

方案二:利用JSONArray自带的subarray方法

如果使用的是org.json.JSONArray,可以用它自带的subarray方法拆分出需要保留的两段,再合并到新数组中:

def startRemoveIdx = 5
def endRemoveIdx = 20

// 拆分出前后两段保留的子数组
def firstPart = jsonArray.subarray(0, startRemoveIdx)
def secondPart = jsonArray.subarray(endRemoveIdx + 1, jsonArray.length())

// 合并到新的JSONArray
def newJsonArray = new org.json.JSONArray()
firstPart.forEach { newJsonArray.put(it) }
secondPart.forEach { newJsonArray.put(it) }

这两种方案都避免了手动遍历判断索引的冗余代码,利用Groovy语法特性或JSON库自带方法实现更简洁的逻辑。

内容的提问来源于stack exchange,提问作者HC LW

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:15:18