首页 > 解决方案 > 在 Jenkins 管道上解析 JSON (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
}

但我收到以下错误:

错误:java.io.NotSerializableException:groovy.json.internal.LazyMap

为了解决这个问题,我必须创建一个完整的方法来执行整个步骤。例如,在一个方法中,我会像上面那样做,解析我想要的信息,最后将它作为一个字符串返回。

然而,这带来了另一个问题,特别是如果您将此方法包装在 awithCredentials中,这将需要另一个withCredentials.

标签: jsonjenkinsgroovyjsonparser

解决方案


我终于找到了更好的解决方案!

Jenkins“管道实用程序步骤”插件中的 readJSON() 方法,如下所示:

https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps/#readjson-read-json-from-files-in-the-workspace

这是一个示例,我们最终可以抛弃丑陋的 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
    }
}

推荐阅读