Here, we are replacing a value of "dpidsha1" from 1234 to another value "abcd" in JSON conent, and Facing an error while writing JSON formatted content to a file "uselessfile.json", and print the content of the file "uselessfile.json"
import groovy.json.JsonBuilder
import groovy.json.JsonSlurper
def buildContent(){
def content = """
{
"app":{ },
"at":2,
"badv":[ ],
"bcat":[ ],
"device":[ {
"carrier":"310-410",
"connectiontype":3,
"devicetype":1,
"dnt":0,
"dpidmd5":"268d403db34e32c45869bb1401247af9",
"dpidsha1":"1234"
},
{
"carrier":"310-410",
"connectiontype":3,
"devicetype":1,
"dnt":0,
"dpidmd5":"268d403db34e32c45869bb1401247af9",
"dpidsha1":"1234"
}]
}"""
def slurped = new JsonSlurper().parseText(content)
def builder = new JsonBuilder(slurped)
builder.content.device.find{it.dpidsha1}.dpidsha1= "abcd"
println(builder.toPrettyString())
writeFile file: 'uselessfile.json', text: builder.toPrettyString(content)
File file = new File("uselessfile.json")
println "Below is the content of the file ${file.absolutePath}"
println uselessfile.json
ERROR:
[Pipeline] End of Pipeline an exception which occurred: in field com.cloudbees.groovy.cps.impl.BlockScopeEnv.locals
Caused: java.io.NotSerializableException: groovy.json.JsonBuilder
How can I solve this?
JsonSlurperis actually the culprit here. You can use thepipeline-utility-stepshere though withreadJSONandwriteJSONalso to fix this.