如果key=value Groovy,则删除
我有一个需要转换为Groovy的ruby脚本,如果如果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_
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,您可能希望在脚本末尾使用返回列表
?查看是否有帮助。