如果key=value Groovy,则删除

如果key=value Groovy,则删除,groovy,Groovy,我有一个需要转换为Groovy的ruby脚本,如果key:value,这是一个删除集合的简单例子 因此,在我的设置中,我向github api发出请求 def jsonParse(def json) { new groovy.json.JsonSlurperClassic().parseText(json) } def request = sh script: """curl https://api.github.com/repos/org/${repo}/releases?access_

我有一个需要转换为Groovy的ruby脚本,如果
key:value
,这是一个删除集合的简单例子

因此,在我的设置中,我向github api发出请求

def jsonParse(def json) {
  new groovy.json.JsonSlurperClassic().parseText(json)
}

def request = sh script: """curl https://api.github.com/repos/org/${repo}/releases?access_token=${env.TOKEN}""", returnStdout: true
def list = jsonParse(request)
return list
这样返回输出

[
  [prerelease: 'true', author: [surname: 'surname', book: 'title'], surname: 'surname'],
  [prerelease: 'false', author: [surname: 'surname', book: 'title'], surname: 'surname']
]
在Ruby中,我将执行以下操作

array.delete_if { |key| key['prerelease'] == true }
如果能够提供一个解释,我将如何使用Groovy来实现这一点,这样我就可以从中学习

更新

使用@Rao的方法,我的列表是完全相同的

def request = sh script: """curl https://api.github.com/repos/org/${repo}/releases?access_token=${env.TOKEN}""", returnStdout: true
def list = jsonParse(request)
list.removeAll(list.findAll{it.prerelease == 'true'})
return list
原始响应

[
  {"prerelease": true, "author": [ {"surname": "surname", "book": "title"}, "surname": "surname"],
  {"prerelease": false, "author": [ {"surname": "surname", "book": "title"}, "surname": "surname"]
]
e。G与

array = array.findAll { it.prerelease != 'true' }
我想你不需要再解释了。G与

array = array.findAll { it.prerelease != 'true' }

我想你不需要再解释了吧?

示例数据是地图列表

需要通过筛选
prerelease
等于
true
从列表中删除项目。希望这个字符串只嵌入在引号之间

下面是生成筛选列表的脚本

def list = [   
  [prerelease: 'true', author: [surname: 'surname', book: 'title'], surname: 'surname'],
  [prerelease: 'true', author: [surname: 'surname', book: 'title'], surname: 'surname'],
  [prerelease: 'false', author: [surname: 'surname', book: 'title'], surname: 'surname'] 
]

//Remove all those elements(map) from list if matching the condition
list.removeAll(list.findAll{it.prerelease == 'true'})

//Show the updated list
println list
你可以在网上快速试用

编辑:基于OP评论

这不是你想要的吗?

EDIT2:基于OP将响应更改为Json

def json = """[
  {"prerelease": true, "author": [ {"surname": "surname", "book": "title"}]},
  {"prerelease": false, "author": [ {"surname": "surname", "book": "title"}]}
]"""
list = new groovy.json.JsonSlurper().parseText(json)
println new groovy.json.JsonBuilder(list.findAll{ it.prerelease != true }).toPrettyString()

示例数据是地图列表

需要通过筛选
prerelease
等于
true
从列表中删除项目。希望这个字符串只嵌入在引号之间

下面是生成筛选列表的脚本

def list = [   
  [prerelease: 'true', author: [surname: 'surname', book: 'title'], surname: 'surname'],
  [prerelease: 'true', author: [surname: 'surname', book: 'title'], surname: 'surname'],
  [prerelease: 'false', author: [surname: 'surname', book: 'title'], surname: 'surname'] 
]

//Remove all those elements(map) from list if matching the condition
list.removeAll(list.findAll{it.prerelease == 'true'})

//Show the updated list
println list
你可以在网上快速试用

编辑:基于OP评论

这不是你想要的吗?

EDIT2:基于OP将响应更改为Json

def json = """[
  {"prerelease": true, "author": [ {"surname": "surname", "book": "title"}]},
  {"prerelease": false, "author": [ {"surname": "surname", "book": "title"}]}
]"""
list = new groovy.json.JsonSlurper().parseText(json)
println new groovy.json.JsonBuilder(list.findAll{ it.prerelease != true }).toPrettyString()


啊,对不起,我把
true
false
搞混了。当然,你必须找到所有不正确的。我更新了我的答案。除此之外,你总是谈论“数组”,但这些都是地图。Groovy中除了maps之外没有关联数组。啊,对不起,我一直认为我的数据结构是一个哈希数组。实际上你发布的是一个映射列表:-)啊,对不起,我一直认为我的数据结构是一个哈希数组,因此,如果prerelease==trueYes,我想从列表中删除一个映射。是的,当然,我的答案仍然符合此要求。啊,对不起,我混淆了
true
false
。当然,你必须找到所有不正确的。我更新了我的答案。除此之外,你总是谈论“数组”,但这些都是地图。Groovy中除了maps之外没有关联数组。啊,对不起,我一直认为我的数据结构是一个哈希数组。实际上你发布的是一个映射列表:-)啊,对不起,我一直认为我的数据结构是一个哈希数组,因此,如果prerelease==trueYes,我想从列表中删除一个映射。当然,我的答案仍然符合这一要求。使用术语时要非常小心。在Java和Groovy中,数组和
列表是不同的。数组是固定长度的。列表可以收缩和增长。你这里有一张
地图的
列表。谢谢你的澄清:-)@Richlewis,如果你还在找的话,请看我的答案。@Richlewis,你能展示一下
sh脚本
结果的原始响应吗?所以只要
返回请求
?小心命名。在Java和Groovy中,数组和
列表是不同的。数组是固定长度的。列表可以收缩和增长。你这里有一个
列表
地图
谢谢你的澄清:-)@richleiwis,如果你还在找我的答案的话,看看我的答案。@richleiwis,你能显示
sh script
结果的原始响应吗?所以只需
返回请求
?这是正确的,但是(a)它的效率低于@richleiwis的解决方案,而且(b) 避免改变现有的数据结构是很好的。谢谢你的回答,我不得不承认,这里有点困惑,
printlin list
返回的是相同的结果集,但格式是
[{prerelease=true}]
例如,列表没有被删除..如果我
返回列表
我只得到了输出
false
@richlevis,请你用输出检查编辑,好吗?这正是我想要的,但当我在应用程序中运行它时,我得到了不同的结果,一定发生了一些我不知道或不理解的事情,我要ng将更新我的问题,并提供有关我的setup@Richlewis,您可能希望在脚本末尾使用
返回列表
?看看这是否有帮助。这是正确的,但是(a)它的效率低于@richleiwis的解决方案和(b)避免改变现有的数据结构是很好的。谢谢你的回答,我不得不承认,这里有点困惑,
printlin list
返回的是相同的结果集,但格式是
[{prerelease=true}]
例如,列表没有被删除..如果我
返回列表
我只得到了输出
false
@richlevis,请你用输出检查编辑,好吗?这正是我想要的,但当我在应用程序中运行它时,我得到了不同的结果,一定发生了一些我不知道或不理解的事情,我要ng将更新我的问题,并提供有关我的setup@Richlewis,您可能希望在脚本末尾使用
返回列表
?查看是否有帮助。