我必须在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构建消息。
如果你被困在一个使用沙箱和Jenkins脚本安全插件的安装上,没有可能添加白名单类/方法,我发现的唯一方法如下:
def slackSendOnRestrictedContext(params) {
if (params.attachments != null) {
/* Soooo ugly but no other choice with restrictions of
Jenkins Script Pipeline Security plugin ^^ */
def paramsAsJson = JsonOutput.toJson(params)
def paramsAsJsonFromReadJson = readJSON text: paramsAsJson
params.attachments = paramsAsJsonFromReadJson.attachments.toString()
}
slackSend (params)
}
当我试图做一些事情时(我认为)发现这个问题应该很简单,但另一个答案没有解决。如果已经将JSON作为字符串加载到变量中,如何将其转换为本机对象?显然,您可以执行<code>新的JsonSlurperClassic()。parseText(json),正如另一个答案所暗示的那样,但Jenkins有一种本地方法可以做到这一点:
node () {
def myJson = '{"version":"1.0.0"}';
def myObject = readJSON text: myJson;
echo myObject.version;
}
希望这能帮助别人。
编辑:正如评论中所解释的,“原生”不太准确。
JSON 是一种使用人类可读文本传输由属性-值对和数组数据类型组成的数据对象的格式。因此,通常 json 是格式化文本。
在时髦的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)
}
问题内容: 有没有一种方法可以从字符串创建全局变量?我知道您可以像这样从字符串中创建变量: 因此,使hello变量等于10。我不知道如何使该用户输入变量成为全局变量,但这不起作用: 问题答案: 您可以使用以下功能:
问题内容: 从java中的json字符串创建哈希图? 我有喜欢的json字符串,想要转换为标准的Hashmap。 我该怎么做? 问题答案: 解析JSONObject并创建HashMap 测试输出:
如何使用Jackson从字符串创建ObjectNode? 我试过: 但是得到 线程maincom.fasterxml.jackson.databind.JsonMappingException中的异常:属性type的冲突setter定义:jdk.nashorn.internal.ir.Symbol#setType(1个参数)vsjdk.nashorn.internal.ir.Symbol#setT
问题内容: 我需要将这些bash变量读入JSON字符串,而我对bash并不熟悉。任何帮助表示赞赏。 问题答案: 如果您不提前知道变量的内容是否正确转义以包含在JSON中,则最好使用类似生成JSON 的程序。否则,您将因麻烦而最终使用无效的JSON。
问题内容: 我有从外部应用程序获取数据的Java应用程序。传入的JSON以字符串形式。我想解析该Strings并创建BSON对象。 不幸的是,我在Java的BSON实现中找不到用于此的API。 我是否像GSON这样使用了外部解析器? 问题答案: 最简单的方法似乎是使用JSON库将JSON字符串解析为,然后使用方法将这些值放入。
我正在为学校制作一种API,用于定制XML编写器。我有: 我需要帮助的是: 我想创建一个与数据[i]同名的元素。 我使用的是dom4jxml。顺便说一句,放在这个罐子里。 我听说过一种叫做hashmap的方法,如果这是正确的方法,请有人解释一下如何使用它。