繁体   English   中英

如何根据数组中的值在 JQ 中 select 项目

[英]How to select items in JQ based on values in array

我有一个 json 文件,其中包含如下数据:

{ 
  "data": {
    "all": {
      "members": [
        {
          "id": 10,
          "name": "First"
        },
        {
          "id": 12,
          "name": "Second"
        },
        {
          "id": 14,
          "name": "Third"
        }
      ],
      "live": {
        "online": [
          10,
          14
        ]
      }
    }
  }
}

如何将 jq 用于 select 并仅显示 data.all.members 中的data.all.members值,其iddata.all.live.online数组中?

所以 output 将类似于:

{
"members": [
        {
          "id": 10,
          "name": "First"
        },
        {
          "id": 14,
          "name": "Third"
        }
      ]
}

单程:

jq '.data.all
| .live.online as $online
| {members}
| .members[] |= select(.id | IN($online[]))
' data.json

这是一个应该相当容易理解的解决方案:

.data.all
| .live.online as $online
| { members: .members | map(select([.id] | inside($online))) }

Output:

{
  "members": [
    {
      "id": 10,
      "name": "First"
    },
    {
      "id": 14,
      "name": "Third"
    }
  ]
}

如果您需要更大的灵活性,您的 id 如何匹配:

.data.all
| .live.online as $online
| { members: .members | map(select(.id as $id | $online | any(. == $id))) }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM