【发布时间】:2018-03-13 19:11:00
【问题描述】:
鉴于然后遵循 JSON
[
{
"id": "1",
"name": "sausage",
"value": 100
},
{
"id": "2",
"name": "spam",
"value": 200
},
{
"id": "3",
"name": "eggs",
"value": 300
}
]
我可以使用id=3 选择一条记录:
jq '.[] | select(.id=="3") | .name,.value' data.json
### > "sausage"
### > "100"
但是如何选择多个id,即带有id in (1,2)的项目?
## this is something I wish I could do
jq '.[] | select(.id in ("1", "2") | .name,.value' data.json
我试过了:
jq '.[] | select(.id=="1") or select(.id=="2") | .name,.value' data.json
但这会导致错误。
【问题讨论】:
-
@JeffMercado,我徘徊为什么
jq 'map(select(.id | in(["1","3"])))' data.json不起作用?你觉得怎么样? -
in令人困惑。文档说key | in(object)is the inverse ofobject | has(key)所以在这里使用in你会想要map( select( .id | in({"1":true, "3":true})))这样的东西。如果您想在数组["1","3"]中搜索,那么inside 可能就是您想要的,只要您使用[.id]而不是.id,例如map( select([.id] | inside(["1","3"])) ) -
这就是我最终做到的:jqplay.org/s/0D_2M9OPfN