Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jq或grep将json输出键值curl到变量_Json_Jq - Fatal编程技术网

使用jq或grep将json输出键值curl到变量

使用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

我已经将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": "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$var
echo“$var”|……
@JeffMercado我对你的评论投了赞成票,但它实际上并没有改变
jq
的任何内容,因为在JSON中去除的空白并不重要。同样奇怪的是,当OP在没有引号的情况下执行
echo$var
时,输出似乎有换行符。获取以下错误
echo$var | jq.result[]|.description?'
jq:error(at:1):无法使用字符串“result”索引字符串