You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Action Slack通知JSON无效及toJSON使用问题求助

解决Slack API通知的JSON无效问题

问题本质

你碰到的两个问题都是JSON格式合法性导致的:

  1. PR标题里的�是无效UTF-8字符,JSON强制要求字符串必须是合法UTF-8编码;
  2. 嵌套场景的引号报错,是手动拼接JSON时没正确转义特殊字符搞出来的。

具体解决办法

1. 清理无效UTF-8字符

别只靠toJSON,先把原始文本里的无效字符清掉:

// 直接移除替换字符�,也可以换成空格之类的合法字符
function cleanInvalidChars(str) {
  return str.replace(/\uFFFD/g, '');
}

const cleanedTitle = cleanInvalidChars(prTitle);

2. 永远别手动拼JSON,用序列化工具

这是解决引号嵌套的核心——直接造对象,再用JSON.stringify()自动处理转义,不管多少层嵌套都不会出问题。

错误示范(别这么干):

// 手动拼字符串,引号一嵌套就炸
const payload = `{
  "text": "PR标题:"${cleanedTitle}"已更新"
}`;

正确示范:

// 先构造JavaScript对象,想怎么嵌套怎么嵌套
const payloadObj = {
  text: `PR标题:"${cleanedTitle}"已更新`,
  attachments: [
    {
      fallback: `PR更新:${cleanedTitle}`,
      fields: [{ title: "标题", value: cleanedTitle, short: false }]
    }
  ]
};

// 序列化自动转义所有特殊字符,生成合法JSON
const payload = JSON.stringify(payloadObj);

3. 别碰单引号的歪路子

Slack API只认双引号的合法JSON,单引号写的JSON是无效的,用单引号代替双引号只会添乱,绝对不能这么做。

额外小技巧

  • 发请求前可以用JSON.parse(payload)自检一下,提前发现格式问题;
  • 要是用Slack官方SDK(比如@slack/web-api),直接传对象就行,SDK会帮你搞定序列化和字符处理,省好多事。

内容的提问来源于stack exchange,提问作者madid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:42:34