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

Groovy如何将JSON顶层字段与stats子数组合并为扁平化结构

问题原因

你代码的错误出在内层遍历逻辑:

  • 你对单条stat数据(也就是代码里的b,本身是Map结构)调用了collect方法,遍历Map的每个键值对时,你都返回只包含id和type的新对象,完全没有把stat本身的字段合并进去,最终结果自然只会保留这两个字段
  • 内层对stats数组不需要使用collectMany,多余的打平操作反而会增加额外遍历开销
collect与collectMany的区别
  • collect:遍历集合元素,按闭包逻辑转换每个元素,返回和原集合长度一致的新集合,不会处理嵌套结构。比如输入[[1,2],[3,4]],执行collect{it}返回的还是[[1,2],[3,4]]
  • collectMany:遍历集合元素,将每个元素转换后得到的集合自动拼接、打平为一维集合。比如输入[[1,2],[3,4]],执行collectMany{it}返回的是[1,2,3,4]
正确实现代码
def json = new JsonSlurper().parseText(text)

def result = json.collectMany { topItem ->
    // 提取顶层公共字段
    def common = [id: topItem.id, type: topItem.type]
    // 每个stat项和公共字段合并
    topItem.stats.collect { stat ->
        common + stat
    }
}

Groovy的Map支持直接用+运算符合并两个Map的键值对,刚好匹配你要的字段合并需求,外层用collectMany把所有顶层对象生成的stat合并列表打平为一维数组,输出和你要求的结构完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:06:06