You need to enable JavaScript to run this app. 如何在Groovy中创建动态长度的JSON数组(SoapUI场景)
优惠活动
大模型
产品
解决方案
定价
更多

如何在Groovy中创建动态长度的JSON数组(SoapUI场景)

问题根因
  • 循环内反复给Details字段赋值会直接覆盖旧值,最终仅保留最后一次循环的写入结果
  • [i].collect{...}仅会生成单元素数组,无法累加多轮循环的对象
修复后实现代码
import groovy.json.JsonBuilder

def IDValue = ... // 存储所有ID的数组
def Description = ... // 存储所有描述的数组
// 提前校验两个数组长度一致,避免下标越界
assert IDValue.size() == Description.size(): "ID数组和描述数组长度不一致"

def detailsList = []
// 遍历所有下标,攒齐所有详情对象
for (int i = 0; i < IDValue.size(); i++) {
    detailsList << [
        id: IDValue[i],
        Desc: Description[i]
    ]
}

// 一次性生成JSON
JsonBuilder builder = new JsonBuilder()
builder {
    Details(detailsList)
}

log.info builder.toPrettyString()
实现说明
  • 先初始化空列表detailsList用来承接所有的详情条目
  • 循环过程中只做列表元素追加,不操作JSON构造器,避免字段覆盖
  • 所有条目收集完成后,一次性把完整列表赋值给Details字段,即可生成包含全部12个对象的JSON数组
  • 新增的长度校验可以提前发现两个数组长度不匹配的问题,避免运行时出现下标越界异常

如果你偏好Groovy的函数式写法,也可以用更简洁的无循环实现:

import groovy.json.JsonBuilder

def IDValue = ... 
def Description = ... 
assert IDValue.size() == Description.size()

def builder = new JsonBuilder()
builder {
    Details([IDValue, Description].transpose().collect { id, desc ->
        [id: id, Desc: desc]
    })
}

log.info builder.toPrettyString()

该写法用transpose把两个数组合并为[id,描述]配对的二维数组,再直接转换为目标对象列表,不需要手动维护下标,代码更简洁不易出错。

内容的提问来源于stack exchange,提问作者Tanveer Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 03:09:03