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

Groovy中获取JSON所有索引值及多条件过滤问题求助

Groovy JSON解析问题解决方案

问题1:获取所有符合条件的BoundId值

原代码仅针对RenewalDetails数组的第一个元素取值,要适配未知数量的响应块,需要遍历整个RenewalDetails数组,同时处理每个元素下的Itemdetails,收集所有符合条件的BoundId。可以用collectMany扁平化嵌套列表,再过滤目标项。

问题2:添加FamilyCode过滤条件

在原有travelID长度为33的判断基础上,新增itemDetail.FamilyCode == "PREMIUM"的条件即可。

修改后的完整代码

// 解析JSON响应体
def parsedData = new groovy.json.JsonSlurper().parseText('{"data":{"RenewalDetails":[{"ExpiryDetails":{"duration":"xxxxx","destination":"LHR","from":"AUH","value":2,"segments":[{"valudeid":"xxx-xx6262-xxxyyy-1111-11-11-1111"}]},"Itemdetails":[{"BoundId":"Value1","isexpired":true,"FamilyCode":"PREMIUM","availabilityDetails":[{"travelID":"AAA-AB1234-AAABBB-2022-11-10-1111","quota":"X","scale":"XXX","class":"X"}]}]},{"ExpiryDetails":{"duration":"xxxxx","destination":"LHR","from":"AUH","value":2,"segments":[{"valudeid":"xxx-xx6262-xxxyyy-1111-11-11-1111"}]},"Itemdetails":[{"BoundId":"Value2","isexpired":true,"FamilyCode":"PREMIUM","availabilityDetails":[{"travelID":"AAA-AB1234-AAABBB-2022-11-10-1111","quota":"X","scale":"XXX","class":"X"}]}]}],"warnings":[{"code":"xxxx","detail":"xxxxxxxx","title":"xxxxxxxx"}]}')

// 收集所有符合双条件的BoundId
def allBoundIds = parsedData.data.RenewalDetails.collectMany { renewal ->
    renewal.Itemdetails.findAll { itemDetail ->
        itemDetail.FamilyCode == "PREMIUM" && 
        itemDetail.availabilityDetails[0].travelID.length() == 33
    }*.BoundId
}

// 输出结果
println "符合条件的BoundId列表:" + allBoundIds

代码说明

  • collectMany:遍历每个RenewalDetails元素,将各元素下的Itemdetails处理结果合并为扁平列表,避免嵌套结构。
  • findAll:筛选同时满足FamilyCode匹配、travelID长度要求的Itemdetails项。
  • *.BoundId:从筛选后的项中批量提取BoundId值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:05:51