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

