`select(。== [“a”,“b”] [])`谓词如何在JQ中起作用?

时间:2017-07-09 10:33:21

标签: json jq

我正在寻找基于我作为文字提供的数组选择JSON条目的方法:

$ echo '["a","b","c","d"]' | jq '.[] | select (. == ["a","b"][] )'
"a"
"b"

在上面的代码中,选择了["a","b"]数组中的所有条目。但是,我不明白. == ["a","b"][]谓词的详细信息是如何工作的,并且会对解释感激不尽。棘手的部分是==的右侧。

相关:

1 个答案:

答案 0 :(得分:2)

理解这里的关键是jq是面向流的。 ["a","b"][]生成一个流,ergo . == ["a","b"][]生成一个流。 select选择在该流中生成真值的项目。

要了解jq的工作原理,通常可以将事情分开。在目前的情况下,您可以尝试:

echo '["a","b","c","d"]' | jq '.[] | (. == ["a","b"][])'

debug也很有用,例如

echo '["a","b","c","d"]' | jq '.[] | select(debug == ["a","b"][])'