有效负载无效JSON

dcs*_*san 3 bash shell json curl

我正在使用curlJSON发送到API端点.然而,在bash链中的某个地方,它变得混乱了.

有关编码的特殊信息curl吗?

如果我像这样构造有效载荷:

 PAYLOAD='payload={"channel": "github", "username": "webhookbot", "icon_emoji": ":ghost:", "text": "'
 PAYLOAD+=$1
 PAYLOAD+=' " }'

 echo $PAYLOAD
 curl -X POST --data-urlencode "$PAYLOAD" $SLACKPOSTURL
 echo "sent"
Run Code Online (Sandbox Code Playgroud)

我会收到一个错误

Payload无效JSONsent

但是,如果我只是硬连线为输出分配一个变量

PAYLOAD='payload={"channel": "github", "username": "webhookbot", "icon_emoji": ":ghost:", "text": "LAST_COMMIT Merge pull request #558 from dcsan/boteditor Boteditor " }'
Run Code Online (Sandbox Code Playgroud)

那么它会很好.

是否存在一些简单的赋值与串联字符串不同的东西?在控制台中,输出看起来相同.

FWIW有些消息可以通过,但内容如下:

LAST_COMMIT来自dcsan/boteditor Boteditor的合并拉取请求#558

只有经过硬编码才能通过.所以它不是另一个非洲人看到的,它与消息的构建方式有关.

fed*_*qui 5

我想你想将值连接到你的变量中.但+=不是这样做的方式.

要连接变量中的字符串,您需要说:

PAYLOAD="$PAYLOAD $1"
Run Code Online (Sandbox Code Playgroud)

总之,它将类似于以下内容.注意需要使用"以便$PAYLOAD扩展变量并使用\"存储文字双引号:

PAYLOAD='payload={"channel": "github", "username": "webhookbot", "icon_emoji": ":ghost:", "text": "'
PAYLOAD="$PAYLOAD $1 \" }"

echo "$PAYLOAD"
curl -X POST --data-urlencode "$PAYLOAD" $SLACKPOSTURL
echo "sent"
Run Code Online (Sandbox Code Playgroud)