свернуть значение ключа вывода json в переменную с помощью jq или grep - PullRequest
0 голосов
/ 30 сентября 2019

Я сохранил вывод 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",

1 Ответ

0 голосов
/ 30 сентября 2019

Используя jq, у вас есть два варианта:

echo $var | jq '.. | .description?'

или если вы хотите быть более конкретным:

echo $var | jq '.result[] | .description?'

Но есть и другие варианты ...

...