Jenkinsfile管道构造JSON对象并写入文件

时间:2018-11-16 11:37:54

标签: jenkins groovy jenkins-pipeline

我想构造一个JSON对象并将内容写入文件。

最初,我受到this的启发并尝试:

def data = [
        a:"test: ${myVar}"
    ]
    writeJSON(file: 'message1.json', json: data)

但这失败了:

  

无法为WriteJSONStep实例化{file = message1.json,json = {a = test}}(文件:String,json:JSON {},漂亮?:int):java.lang.UnsupportedOperationException:必须指定$ class与接口net.sf.json.JSON的实现

所以接下来我尝试:

def data = readJSON text: '{}'
data.a = "test: ${myVar}"
writeJSON(file: 'message1.json', json: data, pretty: 4)

现在构建通过了,但是文件的内容如下:

{
     "a":     {

        "bytes":         [

            114,

            101,

            108,

            101,

            97,

            115,

            101

            50

        ],

        "strings":         [

            "test: ",

            ""

        ],

        "valueCount": 1,

        "values": ["v1.0.2"]

    }
}

我的意图是{"a": "test: v1.0.2"}

我的最终目标是我想动态构造一个JSON对象,为一些动态数据设置一些属性,然后编写JSON文件。

是否存在一些可用于将值分配为字符串而不是某些字节的语法。

2 个答案:

答案 0 :(得分:4)

一种解决方案似乎是更改添加到地图上的代码以指定as String

def data = readJSON text: '{}'
data.a = "test: ${myVar}" as String
writeJSON(file: 'message1.json', json: data, pretty: 4)

答案 1 :(得分:0)

关于您的第一次尝试,您似乎可以使用 JSONObject.fromObject() 函数。

def data = JSONObject.fromObject([
        a:"test: ${myVar}".toString()
    ])
writeJSON(file: 'message1.json', json: data)