【问题标题】:Json String posting in Slack without formating在 Slack 中发布的 Json 字符串没有格式化
【发布时间】:2022-10-18 05:33:24
【问题描述】:

我正在尝试在 Slack 上发布测试结果。发布消息有效,但它作为一个完整的 json 字符串发布。

这是我的代码:

testITArray = ["Test 1", "Test 2", "Test 3r"];
        testITStatusArray = [":white_check_mark:", ":x:", ":x:"];

        var edited = "{";
        for (var i = 0; i < testITArray.length; i++) {
            edited +=
                '"type": "context","elements": [{"type": "mrkdwn","text": "' +
                testITArray[i] +
                '"},{"type": "mrkdwn","text": " ' +
                testITStatusArray[i] +
                ' "}],';
        }
        edited = edited.slice(0, -1);
        edited += "}";

        var asJSON = JSON.stringify(edited);
        axios.post("https://hooks.slack.com/XXXX",
            {
                text: `${asJSON}`,
            }
        );

Tried this option also
         // axios.post("https://hooks.slack.com/XXXX",asJSON,{
         //headers: {
           //  'Content-Type': 'application/json'
           //}
}
            
        );

这是我的输出。

实际结果:

预期结果:

我做错了什么?

【问题讨论】:

  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: javascript json axios slack


【解决方案1】:

这段代码几乎没有问题

1 你正在编写一个json字符串,所以你不需要使用JSON.stringify

2 你的 json 字符串一遍又一遍地包含相同的键,所以它们将被最后一个覆盖

3 不清楚数组的形状应该是什么

4 在js中组合一个json字符串不是最佳实践,因为它很容易导致错误

我试图猜测你需要的 json 的形状

请让我知道它是否是您要找的东西

const yourResult = '{"type": "context","elements": [{"type": "mrkdwn","text": "Test 1"},{"type": "mrkdwn","text": " :white_check_mark: "}],"type": "context","elements": [{"type": "mrkdwn","text": "Test 2"},{"type": "mrkdwn","text": " :x: "}],"type": "context","elements": [{"type": "mrkdwn","text": "Test 3r"},{"type": "mrkdwn","text": " :x: "}]}'


console.log('your string', yourResult)
console.log('parsed result', JSON.parse(yourResult))


const testITArray = ["Test 1", "Test 2", "Test 3r"];
const testITStatusArray = [":white_check_mark:", ":x:", ":x:"];

const resultArray = testITArray.map((t, i) => {
  return {
    type: "context",
    elements: [t, testITStatusArray[i]].map(text => ({
      type: 'mrkdwn',
      text
    }))
  }
})

const resultSingleObject = testITArray.flatMap((t, i) => [t, testITStatusArray[i]])
  .reduce((res, text) => ({
    ...res,
    elements: [...res.elements, {
      type: 'mrkdwn',
      text
    }]
  }), {
    type: 'context',
    elements: []
  })


console.log('array', resultArray)
console.log('array json', JSON.stringify(resultArray))
console.log('object', resultSingleObject)
console.log('object json', JSON.stringify(resultSingleObject))

【讨论】:

  • 数组 Json 字符串对我有效。但是{ blocks : [ resultArray ] } 内的松弛访问我尝试了以下代码,但它没有发送松弛axios.post( "https://hooks.slack.com/XXX", { blocks: [`${JSON.stringify(resultArray)}`] } );
【解决方案2】:

感谢@R4ncid,这是我的解决方案。我在块字符串中添加了 JSON 数组。

const json = "{ blocks: " + `${JSON.stringify(resultArray)}` + " }";
const res = axios.post(
        "https://hooks.slack.com/XXX",
        `${json}`
    );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-10
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多