У меня есть многоуровневая карта, например, которая читается из файла Json:
def someMap = parseJson( readFile(file:'someJson.json'))
/* below is the actual map from someJson.json
someMap = [gen:[type:all],
build:[time:6,
types:[
TypeA:[type1:[a:true, b:false, c:true, d:true, e:true],
type2:[a:true, b:false, c:true, d:true, e:true]],
TypeB:[type1:[a:true, b:false, c:true, d:true, e:true]
type2:[a:true, b:false, c:true, d:true, e:true]],
TypeC:[type1:[a:true, b:false, c:true, d:true, e:true],
type2:[a:true, b:false, c:true, d:true, e:true]]]]
*/
@NonCPS
def parseJson(txt){
def lazyMap = new groovy.json.JsonSlurper().parseText(txt)
def map = [:]
for ( prop in lazyMap ) {
map[prop.key] = prop.value
}
return map;
}
Я хочу удалить из него некоторые записи, скажем «TypeA» и «TypeB» из карты , но с помощью скрипта Jenkins groovy я не могу этого сделать , с обычным groovy я могу удалить записи с помощью removeAll () или итератора, ниже уже пробовал.
someMap.build.types.keySet().removeAll(['TypeA', 'TypeB', 'TypeC'].minus('TypeC')))
--------------
def iterator = someMap.build.types.entrySet().iterator()
while (iterator.hasNext()) {
if (iterator.next().key != 'TypeC' ) {
iterator.remove()
}
}
--------------
def lst=['TypeA','TypeB']
lst.each{
someMap.build.types.remove(it)
}
но я получаю исходную карту без элементов.
меня пугает то, что если я вручную создаю ту же карту и пытаюсь выполнить операцию, она работает нормально.
def mp2 = ['gen':['type':'all'],
'build':['types':[
'TypeA':['type1':['a':'true', 'b':'false', 'c':'true', 'd':'true', 'e':'true'],
'type2':['a':'true', 'b':'false', 'c':'true', 'd':'true', 'e':'true']],
'TypeB':['type1':['a':'true', 'b':'false', 'c':'true', 'd':'true', 'e':'true'],
'type2':['a':'true', 'b':'false', 'c':'true', 'd':'true', 'e':'true']],
'TypeC':['type1':['a':'true', 'b':'false', 'c':'true', 'd':'true', 'e':'true'],
'type2':['a':'true', 'b':'false', 'c':'true', 'd':'true', 'e':'true']]]]]
def lst=['TypeA','TypeB']
lst.each{
mp2.build.types.remove(it)
}