使用jq或grep将json输出键值curl到变量
我已经将curl json输出存储到一个变量中。我只想检索描述并将其存储在另一个变量中 我试过jq和grep,但都没用使用jq或grep将json输出键值curl到变量,json,jq,Json,Jq,我已经将curl json输出存储到一个变量中。我只想检索描述并将其存储在另一个变量中 我试过jq和grep,但都没用 var=`curl -i -X POST -H 'Content-Type: application/json' -d ' { "jsonrpc": "2.0", "method": "trigger.get", "params": { "filter": {"value": "1"}, "sortfield": "las
var=`curl -i -X POST -H 'Content-Type: application/json' -d '
{
"jsonrpc": "2.0",
"method": "trigger.get",
"params": {
"filter": {"value": "1"},
"sortfield": "lastchange",
"limit": 20
},
"auth": "authstring",
"id": 1
}' http://127.0.0.1/zabbix/api_jsonrpc.php`
echo $var
{
"jsonrpc":"2.0",
"result":[
{
"triggerid":"17169",
"expression":"{19444}=1",
"description":"Zabbix agent on {HOST.NAME} is unreachable for 5 minutes",
"url":"",
"status":"0",
"value":"1",
"priority":"3",
"lastchange":"1569589239",
"comments":"",
"error":"",
"templateid":"13437",
"type":"0",
"state":"0",
"flags":"0",
"recovery_mode":"0",
"recovery_expression":"",
"correlation_mode":"0",
"correlation_tag":"",
"manual_close":"0",
"details":""
},
{
"triggerid":"18123",
"expression":"{20525}=1",
"description":"Zabbix agent on {HOST.NAME} is unreachable for 5 minutes",
"url":"",
"status":"0",
"value":"1",
"priority":"3",
"lastchange":"1569590703",
"comments":"",
"error":"",
"templateid":"13437",
"type":"0",
"state":"0",
"flags":"0",
"recovery_mode":"0",
"recovery_expression":"",
"correlation_mode":"0",
"correlation_tag":"",
"manual_close":"0",
"details":""
}
],
"id":1
}
echo $var | jq -r '.description'
分析错误:第1行第9列的数值文字无效
知道那个错误是什么意思吗?我怎样才能用grep做到这一点呢
找到了如何使用grep来实现这一点。所以现在我只需要弄清楚jq
错误意味着什么以及如何纠正它
echo $var | grep -Po '"description":.*?[^\\]",'
"description":"Zabbix agent on {HOST.NAME} is unreachable for 5 minutes",
"description":"Zabbix agent on {HOST.NAME} is unreachable for 5 minutes",
使用jq,您基本上有两种选择:
echo $var | jq '.. | .description?'
或者,如果您想更具体一些:
echo $var | jq '.result[] | .description?'
但是还有其他变体…您的
$var
标准输出可能不是正确的json
格式,让我们先验证您的$var
()
然后重试以下操作:
echo $var | jq '.result[].description'
请附上一份mcve。看起来你一开始就有些垃圾更新了问题。这是唯一的步骤。一个是var=
curl output
,然后echo$varecho“$var”|……
@JeffMercado我对你的评论投了赞成票,但它实际上并没有改变jq
的任何内容,因为在JSON中去除的空白并不重要。同样奇怪的是,当OP在没有引号的情况下执行echo$var
时,输出似乎有换行符。获取以下错误echo$var | jq.result[]|.description?'
jq:error(at:1):无法使用字符串“result”索引字符串