我正在使用Groovy脚本中的httpRequest
从URL检索JSON对象。
pipeline {
agent any
stages {
stage ('Extract Data') {
steps {
script {
def response = httpRequest \
authentication: 'user', \
httpMode: 'GET', \
url: "https://example.com/data"
writeFile file: 'output.json', text: response.content
def data = readFile(file: 'output.json')
def details = new groovy.json.JsonSlurperClassic().parseText(data)
echo "Data: ${details.fields.customfield}"
}
}
}
}
}
我对customfield
字符串感兴趣。字符串的格式为:
Application!01.01.01 TestSuite1,TestSuite2,TestSuite3,TestSuite4 Product!01.01.01,Product2!01.01.02
我想将字符串解析为3个数据集:
但是,我不确定如何执行此操作。 我可以在声明式管道中使用任何Jenkins Groovy库吗?
编辑 根据以下答案,我可以看到我可以通过以下方式制作地图:
def applications = groups[0].split(',').collect { it.split('!') }.collectEntries { [(it):it] }
在示例中,我有:
application = [Application: Application]
我如何获得: application = [Application:01.01.01]
EDIT2 请注意以下输出:
def applications = groups[0].split(',').collect { it.split('!') }
[[Application, 01.01.01]]
答案 0 :(得分:1)
据我所知,没有一个库具有解析数据的功能,但是,由于您知道数据的格式,因此手动解析它们很容易。
输入中有3个组(applications
,suites
,products
),由字符分隔。要获得组,您需要:
def input = "Application!01.01.01 TestSuite1,TestSuite2,TestSuite3,TestSuite4 Product!01.01.01,Product2!01.01.02"
def groups = input.split(' ')
要处理应用程序,您需要使用,
字符分割组0(以防有很多应用程序)。您会获得以下格式的成对列表:name!version
。每对必须用!
分割,因此您将获得格式为[[name, version]]
的列表列表。从最后的结构很容易创建地图。所有步骤合在一起:
def applications = groups[0].split(',').collect { it.split('!') }.collectEntries { [(it[0]):it[1]] }
获取套件列表很容易,只需使用,
字符拆分组1:
def suites = groups[1].split(',')
最后,产品与应用列表类似,但是应该使用第二组:
def products = groups[2].split(',').collect { it.split('!') }.collectEntries { [(it[0]):it[1]] }
答案 1 :(得分:1)
您可以使用管道实用程序步骤readJSON
简化问题def data = readJSON(file: 'output.json')
echo data.fields.customfield
答案 2 :(得分:0)
我找到了一种方法。 Groovy可以转换Object数组的值,并使用toSpreadMap()
将它们转换为映射。但是,数组必须具有偶数个元素。
def appList = ['DevOpsApplication', '01.01.01']
def appMap = appList.toSpreadMap()
有关一些更好的答案,请参阅this