【问题标题】:Conditional select using jq使用 jq 进行条件选择
【发布时间】:2020-07-13 07:52:48
【问题描述】:

我有这个下面的json格式,我想取满足条件的“id”列表

在下面我想将 matchers.value 作为 dev-stack 和 status.state 作为 activeid p>

{
 "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"
     }
   }    
 ]
}

【问题讨论】:

  • 这是小菜一碟,你自己试过什么?
  • 谢谢,我已经尝试并得到了预期的数据...谢谢...顺便说一句,下面是答案jq '.data | .[] | select((.status | .state == "active") and (.matchers | .[] | .value == "dev-stack")) | .id'
  • 不错。考虑将其发布为答案,以便我们对其进行投票

标签: jq


【解决方案1】:

这是一个使用update assignment |=mapselect 更新.data 的解决方案。 请注意,如果多个.matchers 使用any 满足条件,它会避免不受欢迎的笛卡尔积。

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

Try it online!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多