jsonjenkinsgroovyjsonparser

Parsing JSON on Jenkins Pipeline (groovy)


I created a method as shown online:

@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
}

But I get the following error:

ERROR: java.io.NotSerializableException: groovy.json.internal.LazyMap

To work around this, I have to create an entire method to perform an entire step. For instance, in a method, I would do the same as above, parse the information I want, and finally return it as a string.

This, however, presents another issue, especially if you wrap this method inside a withCredentials, which would then require another withCredentials.


Solution

  • A better solution is readJSON() method from the Jenkins "Pipeline Utility Steps" plugin as shown here.

    Here is a sample:

    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
        }
    }