【问题标题】:Invalid payload - Slack API JSON无效负载 - Slack API JSON
【发布时间】:2023-04-03 10:29:02
【问题描述】:

我正在使用 Groovy 脚本通过 Slack API 发送 POST,目前我收到了 invalid_payload 返回,我认为这很可能是由于我的 JSON 格式。我知道 Slack API 期望它带有双引号的 JSON,但我似乎无法将变量传递给 JSON 对象:

SUCCESS_MESSAGE = '{"attachments": [{"color": "#2A9B3A", "author_name": ${DEV_NAME}, "title": "Build Status", "title_link": ${BUILD_URL}, "text": "Successful Build" }]}'
def response = ["curl", "-X", "POST", "-H", "Content-Type: application/json", "-d", "${SUCCESS_MESSAGE}", "https://hooks.slack.com/services/${SLACK_WEBHOOK}"].execute().text

我应该如何正确格式化我的SUCCESS_MESSAGE var,以免出现错误?

【问题讨论】:

    标签: json groovy


    【解决方案1】:
    1. 您需要引用 DEV_NAMEBUILD_URL 变量扩展,以便 JSON 字符串有效。
    2. 您的整个字符串需要包含在 " 而不是 ' 中,这样变量才能真正展开
    3. 您需要将escape " 您的字符串中,以便它们出现在您的 JSON 字符串中。

      SUCCESS_MESSAGE = "{\"附件\": [{\"color\": \"#2A9B3A\", \"author_name\": \"${DEV_NAME}\", \"title\": \ "构建状态\", \"title_link\": \"${BUILD_URL}\", \"text\": \"成功构建\" }]}"`

    或者,您可以以更好的编程方式生成 JSON。如果您的通知变得更复杂一点,这会有所帮助:

    def notification = [
      attachments: [
        [
          color: "#2A9B3A",
          author_name: DEV_NAME,
          title: "Build Status",
          title_link: BUILD_URL,
          text: "Successful Build"
        ]
      ]
    ]
    
    def response = ["curl", "-X", "POST", "-H", "Content-Type: application/json", "-d", JsonOutput.toJson(notification), "https://hooks.slack.com/services/${SLACK_WEBHOOK}"].execute().text
    

    【讨论】:

    • 我试过了,所有通过的都是“${DEV_NAME}”,而不是实际值
    • 太棒了,这很有效,感谢您的解释:-)
    • @Richlewis 我还为您添加了另一种构建 JSON 的方法,如果通知变得更大更复杂,这种方法会很有用。您可以在 Groovy 中以编程方式轻松生成它们。
    猜你喜欢
    • 2018-07-31
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 2017-11-26
    • 2019-12-13
    • 1970-01-01
    相关资源
    最近更新 更多