具有多个参数的JQ选择过滤器

ccp*_*zza 3 json jq

然后给出以下JSON

[
  {
    "id": "1",
    "name": "sausage",
    "value": 100
  },
  {
    "id": "2",
    "name": "spam",
    "value": 200
  },
  {
    "id": "3",
    "name": "eggs",
    "value": 300
  }
]
Run Code Online (Sandbox Code Playgroud)

我可以通过以下方式选择一条记录id=3

jq '.[] | select(.id=="3") | .name,.value' data.json
### > "sausage"
### > "100"
Run Code Online (Sandbox Code Playgroud)

但是如何选择多个id,即带有的项id in (1,2)

## this is something I wish I could do
jq '.[] | select(.id in ("1", "2") | .name,.value' data.json 
Run Code Online (Sandbox Code Playgroud)

我试过了:

jq '.[] | select(.id=="1") or select(.id=="2") | .name,.value' data.json
Run Code Online (Sandbox Code Playgroud)

但这会导致错误。

bha*_*nsa 5

尝试这个:

.[] | select(.id == "3" or .id == "2") | .name,.value
Run Code Online (Sandbox Code Playgroud)

演示版

  • 要解决 @jq170727 提出的问题,只需将对 `select` 的调用包装在对 `first` 的调用中(在 jq 1.4 及更高版本中可用),例如 `first(select(.id == ("3","2) “)))` (4认同)
  • 正如其他类似 [answer](/sf/answers/2668876451/) 对类似问题的建议,它可以进一步简化为`.[] | select(.id == ("3", "2")) | .name,.value`。 (2认同)