我必须在Groovy中创建这个JSON文件。
我尝试了许多事情(JsonOutput.toJson()
/ JsonSlurper.parseText()
)失败。
{
"attachments":[
{
"fallback":"New open task [Urgent]: <http://url_to_task|Test out Slack message attachments>",
"pretext":"New open task [Urgent]: <http://url_to_task|Test out Slack message attachments>",
"color":"#D00000",
"fields":[
{
"title":"Notes",
"value":"This is much easier than I thought it would be.",
"short":false
}
]
}
]
}
这是为了向Slack发布Jenkins构建消息。
答案 0 :(得分:36)
JSON是一种使用人类可读文本传输由属性 - 值对和数组数据类型组成的数据对象的格式。 所以,一般来说json是一个格式化的文本。
在groovy中,json对象只是一系列地图/数组。
使用JsonSlurperClassic解析json
//use JsonSlurperClassic because it produces HashMap that could be serialized by pipeline
import groovy.json.JsonSlurperClassic
node{
def json = readFile(file:'message2.json')
def data = new JsonSlurperClassic().parseText(json)
echo "color: ${data.attachments[0].color}"
}
使用管道解析json
node{
def data = readJSON file:'message2.json'
echo "color: ${data.attachments[0].color}"
}
从代码构建json并将其写入文件
import groovy.json.JsonOutput
node{
//to create json declare a sequence of maps/arrays in groovy
//here is the data according to your sample
def data = [
attachments:[
[
fallback: "New open task [Urgent]: <http://url_to_task|Test out Slack message attachments>",
pretext : "New open task [Urgent]: <http://url_to_task|Test out Slack message attachments>",
color : "#D00000",
fields :[
[
title: "Notes",
value: "This is much easier than I thought it would be.",
short: false
]
]
]
]
]
//two alternatives to write
//native pipeline step:
writeJSON(file: 'message1.json', json: data)
//but if writeJSON not supported by your version:
//convert maps/arrays to json formatted string
def json = JsonOutput.toJson(data)
//if you need pretty print (multiline) json
json = JsonOutput.prettyPrint(json)
//put string into the file:
writeFile(file:'message2.json', text: json)
}
答案 1 :(得分:15)
在我尝试做某事时(我相信)发现这个问题应该很简单,但其他答案没有解决。如果您已将JSON作为字符串加载到变量中,那么如何将其转换为本机对象?显然你可以像其他答案所说的那样做new JsonSlurperClassic().parseText(json)
,但詹金斯有一种本地方式可以做到这一点:
node () {
def myJson = '{"version":"1.0.0"}';
def myObject = readJSON text: myJson;
echo myObject.version;
}
希望这有助于某人。
编辑:正如评论中所解释的那样,“原生”并不十分准确。
答案 2 :(得分:0)
这将从jsonFile文件返回“版本”的值:
def getVersion(jsonFile){
def fileContent = readFile "${jsonFile}"
Map jsonContent = (Map) new JsonSlurper().parseText(fileContent)
version = jsonContent.get("version")
return version
}
答案 3 :(得分:0)
如果您被困在使用沙箱和Jenkins Script Security插件的安装上,而无法添加列入白名单的类/方法,那么我发现的唯一方法是:
"MutationObserver" undefined