Jenkins流水线中如何将Groovy对象转为JSON字符串传入函数?
Jenkins流水线JSON打印格式问题解析
现象原因
Jenkins的readJSON步骤会将输入的JSON数组转换为Groovy原生的List<Map>集合对象:
- 直接打印数组元素时,Jenkins流水线环境(尤其是Scripted Pipeline模式)会自动对Groovy Map进行JSON序列化,输出标准JSON字符串;
- 但当把Map传入自定义函数后,函数内的
println是Groovy原生的打印逻辑,它会采用Groovy Map自身的字符串表示格式([key1:value1, key2:value2...])输出,而非自动转为JSON。
解决方法
方法1:使用Jenkins内置的writeJSON步骤
利用Jenkins提供的writeJSON步骤把Map序列化为JSON字符串,设置returnText: true直接返回字符串而不写入文件:
def printJsonElement(obj) { def jsonStr = writeJSON returnText: true, json: obj println jsonStr }
方法2:使用Groovy原生JSON工具类
导入Groovy的JsonOutput类,手动将Map序列化为JSON字符串,还可选择格式化输出:
import groovy.json.JsonOutput def printJsonElement(obj) { // 生成紧凑的JSON字符串 def compactJson = JsonOutput.toJson(obj) println compactJson // 若需要格式化后的美观输出 def prettyJson = JsonOutput.prettyPrint(compactJson) println prettyJson }
注意事项
如果是在Declarative Pipeline中使用自定义函数,需要将函数逻辑包裹在script块内,确保Groovy代码能正常执行。
内容的提问来源于stack exchange,提问作者Chris F
相关产品推荐
相关产品推荐

