当前位置: 首页 > 知识库问答 >
问题:

从 Jenkins Pipeline 中的 Groovy 变量创建 JSON 字符串

步胜
2023-03-14

我必须在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构建消息。

共有3个答案

姜卜霸
2023-03-14

如果你被困在一个使用沙箱和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)
}
谭新知
2023-03-14

当我试图做一些事情时(我认为)发现这个问题应该很简单,但另一个答案没有解决。如果已经将JSON作为字符串加载到变量中,如何将其转换为本机对象?显然,您可以执行<code>新的JsonSlurperClassic()。parseText(json),正如另一个答案所暗示的那样,但Jenkins有一种本地方法可以做到这一点:

node () {
  def myJson = '{"version":"1.0.0"}';
  def myObject = readJSON text: myJson;
  echo myObject.version;
}

希望这能帮助别人。

编辑:正如评论中所解释的,“原生”不太准确。

轩辕风华
2023-03-14

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的方法,如果这是正确的方法,请有人解释一下如何使用它。