如何用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
相关产品推荐
相关产品推荐

