【发布时间】:2021-08-18 18:56:16
【问题描述】:
有这样的输入:
[
{
"foo": "aaa",
"bar": 111
},
{
"foo": "bbb",
"bar": 111
},
{
"foo": "ccc",
"bar": 222
},
{
"foo": "aaa",
"bar": 333
},
{
"foo": "ddd",
"bar": 444
}
]
我想选择“foo”键等于“aaa”或“bbb”的所有对象。所以解决方案很明显:
.[] | select ( .foo=="aaa" or .foo=="bbb" )
(https://jqplay.org/s/x7FGo1uQNW)
但我想增强它并将 x=y or x=z 替换为 sql'ish 风格的 x in (y,z)。我被卡住了,这是很自然的尝试:
.[] | select ( .foo in (["aaa", "bbb"]) )
导致错误:
jq: 错误:语法错误,意外 IDENT,期待 ';'或 ')' (Unix shell 引用问题?),第 1 行:
我也试过这个:
.[] | select ( .foo | in (["aaa", "bbb"]) )
但也不是很好......
jq: error (at :21): 无法检查数组是否有字符串键
这可能吗?
【问题讨论】:
-
这里相关的jq过滤器是
IN,而不是in。 -
AFAIK,IN 运算符是自 jq 1.6.somethig
-
即使你的 jq 没有 IN,你仍然可以通过先添加它的
def来使用它,这很容易找到,例如通过谷歌搜索。 -
好吧 - 当然。但我可以像接受的答案一样简单地做;)
标签: arrays json select filter jq