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

如何用Gpath提取JSON中所有items的id(排除父级id)

问题:提取所有子项items的id列表

给定以下JSON响应载荷:

[{
    "id": 1,
    "catname": "Cat01",
    "items": [{
        "Name": "Item01",
        "id": 2
    }, {
        "Name": "Item02",
        "id": 3
    }]
},
{
    "id": 4,
    "catname": "Cat02",
    "items": [{
        "Name": "Item03",
        "id": 5
    }, {
        "Name": "Item04",
        "id": 6
    }]
},
{
    "id": 7,
    "catname": "Cat03",
    "items": [{
        "Name": "Item05",
        "id": 8
    }]
}
]

需要获取所有items的id列表(排除父级的id),预期结果为[2, 3, 5, 6, 8]。尝试使用findAll{it}.items.findAll{it}.id但未生效,寻求解决方案。

解决方案

你的写法问题在于:findAll{it}.items会返回一个列表的列表(每个父对象的items都是一个子列表),此时直接调用.findAll{it}.id无法正确提取子项的id——因为你是在给子列表而非子项本身取属性。

可以通过以下两种Groovy写法实现需求:

方法1:使用collectMany展平列表

responseList.collectMany { it.items }.collect { it.id }
  • collectMany { it.items }会将所有父对象的items子列表合并成一个单一的子项列表
  • 再通过collect { it.id }提取每个子项的id,最终得到预期的结果列表

方法2:使用展开运算符+flatten

responseList*.items.flatten().collect { it.id }
  • responseList*.items通过展开运算符获取所有父对象的items子列表,得到List<List<Map>>结构
  • flatten()将嵌套列表展平为单一的子项列表
  • 最后collect { it.id }提取所有子项的id

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:35:31