Условный выбор с использованием jq - PullRequest
0 голосов
/ 13 июля 2020

У меня это ниже json формат, я хочу взять список «id», который удовлетворяет условию

в этом ниже Я хочу взять id , у которого есть сопоставители .value как dev-stack и status.state как active

{
 "status": "success",
 "data": [
   {
     "id": "b5e7f85d",
     "matchers": [
       {
         "name": "stack",
         "value": "dev-stack",
         "isRegex": true
       }
     ],
     "startsAt": "2020-07-13T07:17:36Z",
     "endsAt": "2020-07-15T07:15:44Z",
     "updatedAt": "2020-07-13T07:15:59.643692023Z",
     "createdBy": "api",
     "comment": "Silence",
     "status": {
       "state": "active"
     }
   },
   {
     "id": "1fdaa4b5",
     "matchers": [
       {
         "name": "stack",
         "value": "qa-stack",
         "isRegex": true
       }
     ],
     "startsAt": "2020-07-10T13:19:12Z",
     "endsAt": "2020-07-10T13:20:55.510739499Z",
     "updatedAt": "2020-07-10T13:20:55.510739499Z",
     "createdBy": "api",
     "comment": "Silence",
     "status": {
       "state": "expired"
     }
   }    
 ]
}

1 Ответ

0 голосов
/ 13 июля 2020

Вот решение, которое использует назначение обновления | = , map и select для обновления .data. Обратите внимание, что это позволяет избежать нежелательного декартова произведения, если несколько .matchers соответствуют критериям с использованием any .

.data |= map(select(
  (.matchers | any(.value=="dev-stack")) and (.status.state=="active")
))

Попробуйте онлайн!

...