在bash脚本中添加JSON元素

在bash脚本中添加JSON元素,json,bash,shell,http,Json,Bash,Shell,Http,在我的bash脚本中,有一行代码如下所示: JOB_RESULTS=$(curl --fail -k -H "Content-Type: application/xml" --write-out HTTP_CODE='%{http_code}' "${request_url}") http_code="${JOB_RESULTS:${#JOB_RESULTS}-17}" http_body="${JOB_RESULTS:0:${#JOB_RESULTS}-17}" http_code_json

在我的bash脚本中,有一行代码如下所示:

JOB_RESULTS=$(curl --fail -k -H "Content-Type: application/xml" --write-out HTTP_CODE='%{http_code}' "${request_url}")
http_code="${JOB_RESULTS:${#JOB_RESULTS}-17}"
http_body="${JOB_RESULTS:0:${#JOB_RESULTS}-17}"
http_code_json=", ${http_code}}"
my_result="${http_body/%\}/$http_code_json}"
{"name":"callCLF010Job","id":11702,"status":"STARTING","message":"The job has started.","exitCode":"exitCode=UNKNOWN;exitDescriptio
该行输出以下内容:

{"name":"callCLF010Job","id":11693,"status":"STARTING","message":"The job has started.","exitCode":"exitCode=UNKNOWN;exitDescription="}HTTP_CODE=200
问题是,我想将
HTTP\u code
添加到JSON消息中

是否有方法使返回看起来像
{“name”:“callclf010作业”,“id”:11693,“状态”:“正在启动”,“消息”:“作业已启动”,“exitCode”:“exitCode=UNKNOWN;exitDescription=”,“HTTP_代码”:“200”}

编辑:

随着confettis的更改,我的代码如下所示:

JOB_RESULTS=$(curl --fail -k -H "Content-Type: application/xml" --write-out HTTP_CODE='%{http_code}' "${request_url}")
http_code="${JOB_RESULTS:${#JOB_RESULTS}-17}"
http_body="${JOB_RESULTS:0:${#JOB_RESULTS}-17}"
http_code_json=", ${http_code}}"
my_result="${http_body/%\}/$http_code_json}"
{"name":"callCLF010Job","id":11702,"status":"STARTING","message":"The job has started.","exitCode":"exitCode=UNKNOWN;exitDescriptio
当我运行
echo$my_result
时,我的输出如下所示:

JOB_RESULTS=$(curl --fail -k -H "Content-Type: application/xml" --write-out HTTP_CODE='%{http_code}' "${request_url}")
http_code="${JOB_RESULTS:${#JOB_RESULTS}-17}"
http_body="${JOB_RESULTS:0:${#JOB_RESULTS}-17}"
http_code_json=", ${http_code}}"
my_result="${http_body/%\}/$http_code_json}"
{"name":"callCLF010Job","id":11702,"status":"STARTING","message":"The job has started.","exitCode":"exitCode=UNKNOWN;exitDescriptio

一个选项是使用sed以您想要的方式格式化输出:

echo $JOB_RESULTS | sed 's/}HTTP_CODE=\([0-9]\+\)$/,"HTTP_CODE":"\1"}/'
或者在您的命令中:

JOB_RESULTS=$(curl --fail -k -H "Content-Type: application/xml" --write-out HTTP_CODE='%{http_code}' "${request_url}" | sed 's/}HTTP_CODE=\([0-9]\+\)$/,"HTTP_CODE":"\1"}/')
这是用来完成工作的。(除了
curl
,还有纯bash)

curlout=$(curl-s-fail-k-H“内容类型:application/xml”--写出“HTTP\u代码”:“%{HTTP\u代码}”http://example.com")
http#u code=“${curlout:${#curlout}-17}”
http#u body=“${curlout:0:${{curlout}-17}”
http_code_json=“,${http_code}}”
my\u result=“${http\u body/%\}/$http\u code\u json}”
替换
http://example.com
带有您选择的URL或变量


为了防止错误URL或(否)输出时出错,您应该将最后四行放在
if construct
中。例如,
if[[$http\u code!='“http\u code:“000”]

我希望能够使用jq获取代码,例如:
http\u status=$(echo“${JOB\u RESULTS}”| jq-r.http\u code')
我看到这会格式化输出,但我想要的是将
http\u code
插入到
$JOB\u RESULTS
,因此,如果我只回显
$JOB\u结果
HTTP\u代码就会出现在这里,那么您可以在命令中使用sed。我编辑了答案,向你展示。非常感谢@Murilo Dutra,这非常简单,正是我所需要的。你确定这会奏效吗?我的结果缺少一些引号和括号,我不确定您希望如何格式化。我希望能够使用jq从response@Josh对不起,我的答案有两个愚蠢的拼写错误。我已编辑,请现在再试一次
echo$my_result | jq.HTTP_code
现在可以为我打印
“200”
。如果您需要一个数值,请告诉我,然后我可以相应地编辑我的答案。我不确定您编辑了什么,http_code_json似乎有一个额外的括号,出于某种原因,http_正文中的-17在我的vim syntaxI中以红色突出显示,我将继续尝试,你看起来和我要找的很接近谢谢you@Josh当JSON必须是
时,我的原始答案中有一个
=
。我用
http://a.4cdn.org/boards.json
而不是
http://example.com
而且它工作得非常完美。