在 Jenkins 管道上解析 JSON (groovy)
Parsing JSON on Jenkins Pipeline (groovy)
我创建了一个网上显示的方法:
@NonCPS
def parseJsonString(String jsonString) {
def lazyMap = new JsonSlurper().parseText(jsonString)
// JsonSlurper returns a non-serializable LazyMap, so copy it into a regular map before returning
def m = [:]
m.putAll(lazyMap)
return m
}
但我收到以下错误:
ERROR: java.io.NotSerializableException: groovy.json.internal.LazyMap
要解决这个问题,我必须创建一个完整的方法来执行整个步骤。比如在一个方法中,我会像上面一样,解析我想要的信息,最后return它作为一个字符串。
然而,这会带来另一个问题,特别是如果您将此方法包装在 withCredentials
中,这将需要另一个 withCredentials
.
我终于找到了更好的解决方案!
来自 Jenkins "Pipeline Utility Steps" 插件的 readJSON() 方法,如下所示:
这是一个示例,我们最终可以摆脱丑陋的 GROOVY JSONPARSE 废话。
node() {
stage("checkout") {
def jsonString = '{"name":"katone","age":5}'
def jsonObj = readJSON text: jsonString
assert jsonObj['name'] == 'katone' // this is a comparison. It returns true
sh "echo ${jsonObj.name}" // prints out katone
sh "echo ${jsonObj.age}" // prints out 5
}
}
我创建了一个网上显示的方法:
@NonCPS
def parseJsonString(String jsonString) {
def lazyMap = new JsonSlurper().parseText(jsonString)
// JsonSlurper returns a non-serializable LazyMap, so copy it into a regular map before returning
def m = [:]
m.putAll(lazyMap)
return m
}
但我收到以下错误:
ERROR: java.io.NotSerializableException: groovy.json.internal.LazyMap
要解决这个问题,我必须创建一个完整的方法来执行整个步骤。比如在一个方法中,我会像上面一样,解析我想要的信息,最后return它作为一个字符串。
然而,这会带来另一个问题,特别是如果您将此方法包装在 withCredentials
中,这将需要另一个 withCredentials
.
我终于找到了更好的解决方案!
来自 Jenkins "Pipeline Utility Steps" 插件的 readJSON() 方法,如下所示:
这是一个示例,我们最终可以摆脱丑陋的 GROOVY JSONPARSE 废话。
node() {
stage("checkout") {
def jsonString = '{"name":"katone","age":5}'
def jsonObj = readJSON text: jsonString
assert jsonObj['name'] == 'katone' // this is a comparison. It returns true
sh "echo ${jsonObj.name}" // prints out katone
sh "echo ${jsonObj.age}" // prints out 5
}
}