Find/Filter 具有来自 JSON 数组(映射列表)的特定键值对的列表
Find/Filter the lists with a specific key-value pair from a JSON ARRAY (list of maps)
我有一个 JSON 数组(地图列表)类似于:
def listOfMap = [[TESTCASE:1, METHOD:'CLICK', RESULT:'PASS'],
[TESTCASE:2, METHOD:'CLICK', RESULT:'FAIL'],
[TESTCASE:3, METHOD:'CLICK', RESULT:'FAIL'],
[TESTCASE:4, METHOD:'TYPETEXT', RESULT:'FAIL']]
1) 我想 get/filter/return 所有包含键值对“METHOD:CLICK”的列表和“结果:失败”
My output should return 2 lists out of 4: [TESTCASE:2, METHOD:CLICK, RESULT:FAIL], [TESTCASE:3, METHOD:CLICK, RESULT:FAIL]
2) 我想获得 count 个包含键值对“METHOD:CLICK”和“结果:失败"
My output should be : 2
3) 从上面的地图列表中,我想获取键“METHOD[=32=”的所有 unique/distinct 值 ]
My output should return unique values of the key method : CLICK, TYPETEXT
过滤
Groovy 有一个名为 Collection.findAll(Closure closure)
的方法,它过滤掉所有不满足谓词(表示为闭包)的值:
println listOfMap.findAll { map -> map.METHOD == 'CLICK' && map.RESULT == 'FAIL' }
// Output: [[TESTCASE:2, METHOD:CLICK, RESULT:FAIL], [TESTCASE:3, METHOD:CLICK, RESULT:FAIL]]
计数中
还有一种方法DefaultGroovyMethods.count(Iterable<T> self, Closure closure)
需要一个谓词并计算有多少元素满足它:
println listOfMap.count { map -> map.METHOD == 'CLICK' && map.RESULT == 'FAIL' }
// Output: 2
地图列表中的唯一值列表
要从映射列表中为给定键选择一个值,您可以使用 Groovy's spread operator:
println listOfMap*.METHOD // btw, listOfMap.METHOD will do the same
此代码转换为“对于 listOfMap
中的每个元素,为键 METHOD
获取一个值。在下一步中,您可以使用 Collection.unique()
方法删除所有重复项:
println listOfMap*.METHOD.unique()
// Output: [CLICK, TYPETEXT]
警告:以下方法在 Jenkins 管道 Groovy 脚本中不起作用。在这种情况下,您将必须明确使用 Collection.collect(Closure closure)
:
println listOfMap.collect { map -> map.METHOD }.unique()
我有一个 JSON 数组(地图列表)类似于:
def listOfMap = [[TESTCASE:1, METHOD:'CLICK', RESULT:'PASS'],
[TESTCASE:2, METHOD:'CLICK', RESULT:'FAIL'],
[TESTCASE:3, METHOD:'CLICK', RESULT:'FAIL'],
[TESTCASE:4, METHOD:'TYPETEXT', RESULT:'FAIL']]
1) 我想 get/filter/return 所有包含键值对“METHOD:CLICK”的列表和“结果:失败”
My output should return 2 lists out of 4: [TESTCASE:2, METHOD:CLICK, RESULT:FAIL], [TESTCASE:3, METHOD:CLICK, RESULT:FAIL]
2) 我想获得 count 个包含键值对“METHOD:CLICK”和“结果:失败"
My output should be : 2
3) 从上面的地图列表中,我想获取键“METHOD[=32=”的所有 unique/distinct 值 ]
My output should return unique values of the key method : CLICK, TYPETEXT
过滤
Groovy 有一个名为 Collection.findAll(Closure closure)
的方法,它过滤掉所有不满足谓词(表示为闭包)的值:
println listOfMap.findAll { map -> map.METHOD == 'CLICK' && map.RESULT == 'FAIL' }
// Output: [[TESTCASE:2, METHOD:CLICK, RESULT:FAIL], [TESTCASE:3, METHOD:CLICK, RESULT:FAIL]]
计数中
还有一种方法DefaultGroovyMethods.count(Iterable<T> self, Closure closure)
需要一个谓词并计算有多少元素满足它:
println listOfMap.count { map -> map.METHOD == 'CLICK' && map.RESULT == 'FAIL' }
// Output: 2
地图列表中的唯一值列表
要从映射列表中为给定键选择一个值,您可以使用 Groovy's spread operator:
println listOfMap*.METHOD // btw, listOfMap.METHOD will do the same
此代码转换为“对于 listOfMap
中的每个元素,为键 METHOD
获取一个值。在下一步中,您可以使用 Collection.unique()
方法删除所有重复项:
println listOfMap*.METHOD.unique()
// Output: [CLICK, TYPETEXT]
警告:以下方法在 Jenkins 管道 Groovy 脚本中不起作用。在这种情况下,您将必须明确使用 Collection.collect(Closure closure)
:
println listOfMap.collect { map -> map.METHOD }.unique()