鑒于串列:
[
{
"prop1": "prop11",
"prop2": "prop21",
"list": ["element1", "element2", "element3"]
},
{
"prop1": "prop12",
"prop2": "prop22",
"list": ["element1", "element3"]
},
{
"prop1": "prop13",
"prop2": "prop23",
"list": ["element2", "element3"]
}
]
使用 jq 時,如何通過子串列僅過濾根串列元素。例如,回傳串列中包含 element1 的所有元素。輸出應該是:
[
{
"prop1": "prop11",
"prop2": "prop21",
"list": ["element1", "element2", "element3"]
},
{
"prop1": "prop12",
"prop2": "prop22",
"list": ["element1", "element3"]
}
]
或者
{"prop1": "prop11","prop2": "prop21","list": ["element1", "element2", "element3"]}
{"prop1": "prop12","prop2": "prop22","list": ["element1", "element3"]}
uj5u.com熱心網友回復:
index
提供了一個簡短且在實踐中非常快速的解決方案:
jq 'map(select(.list|index("element1")))'
或者
jq -c '.[] | select(.list|index("element1"))'
uj5u.com熱心網友回復:
檢查any
串列的元素是否等于==
給定的字串:
jq 'map(select(any(.list[]; . == "element1")))'
[
{
"prop1": "prop11",
"prop2": "prop21",
"list": [
"element1",
"element2",
"element3"
]
},
{
"prop1": "prop12",
"prop2": "prop22",
"list": [
"element1",
"element3"
]
}
]
演示
使用.[] | …
而不是map(…)
擺脫外部陣列:
jq '.[] | select(any(.list[]; . == "element1"))'
{
"prop1": "prop11",
"prop2": "prop21",
"list": [
"element1",
"element2",
"element3"
]
}
{
"prop1": "prop12",
"prop2": "prop22",
"list": [
"element1",
"element3"
]
}
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/491449.html
上一篇:替換一列bash中的模式