0
我提交的消息在通过他们的API和“消息”变量的内容bash脚本来山魈导致API调用一个错误回来:如何在bash脚本中使用curl来发布JSON变量?
An error occured: {"status":"error","code":-1,"name":"ValidationError","message":"You must specify a key value"}
的$的内容MESSAGE_BODY变量是:
Trigger: Network traffic high on 'server'
Trigger status: PROBLEM
Trigger severity: Average
Trigger URL:
Item values:
1. Network traffic inbound (server:net.if.in[eth0,bytes]): 3.54 MBytes
2. Network traffic outbound (server:net.if.out[eth0,bytes]): 77.26 KBytes
3. *UNKNOWN* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*
Original event ID: 84
我不知道什么是字符串的一部分是把它扔了,但似乎什么原因造成的JSON时提交山魈的API是无效的。
如果我将上述消息更改为诸如“Testing 123”之类的简单消息,则会成功提交消息。
,做的POST代码如下:
#!/bin/bash
...
message_body = `cat message.txt`
msg='{ "async": false, "key": "'$key'", "message": { "from_email": "'$from_email'", "from_name": "'$from_name'", "headers": { "Reply-To": "'$reply_to'" }, "auto_html": false, "return_path_domain": null, "subject": "'$2'", "text": "'$message_body'", "to": [ { "email": "'$1'", "type": "to" } ] } }'
results=$(curl -A 'Mandrill-Curl/1.0' -d "$msg" 'https://mandrillapp.com/api/1.0/messages/send.json' -s 2>&1);
echo "$results"
我能做些什么,以确保$message_body
变量并随时准备所要提交有效的JSON?
更改为'message_body = $(cat message.txt)',或者如果您想让您的同事惊讶,'m_b = $(
shellter
如果你想**绝对肯定** message_body是有效的JSON,请使用特定于JSON的工具(如'jq')来生成它;这将涵盖所有的角落案例 - 文字引号&c。除非'jq'被告知使用非JSON输出格式,否则它实际上不能发出无效的JSON内容。 –