json jq中的全词匹配

ohfgkhjo  于 2023-04-22  发布在  其他
关注(0)|答案(2)|浏览(90)

运行下面的:

$ echo '["lorem", "ipsum", "dolor"]' | jq '. | contains(["rem"])'

返回true,因为“rem”是“lorem”的子字符串。我想要一个完整的单词匹配,这将取消“rem”的资格,只允许输入三个值中的一个。

$ echo '["lorem", "ipsum", "dolor"]' | jq 'select(. | index("rem"))'

什么都不返回,但jq干净地退出了。我本来希望是false
我如何得到一个布尔值为整个词匹配?

pkwftd7m

pkwftd7m1#

如果any(=至少一个)的项目等于(==)一个给定的值,则希望接收true

$ echo '["lorem", "ipsum", "dolor"]' | jq 'any(. == "lorem")'
true

$ echo '["lorem", "ipsum", "dolor"]' | jq 'any(. == "rem")'
false

换句话说,如果给定值包含IN一组项目.[],则希望接收true

$ echo '["lorem", "ipsum", "dolor"]' | jq 'IN(.[]; "lorem")'
true

$ echo '["lorem", "ipsum", "dolor"]' | jq 'IN(.[]; "rem")'
false
eh57zj3b

eh57zj3b2#

我以前也被这个绊倒过很多次,因为你会期望它像这样开箱即用。
但答案(如果你在寻找一个可链接的退出代码)是:使用-e标志,根据man jq
如果最后一个输出值既不是false也不是null,则将jq的退出状态设置为0;如果最后一个输出值是false或null,则设置为1;如果没有产生有效结果,则设置为4。通常,如果存在任何使用问题或系统错误,则jq退出2;如果存在jq程序编译错误,则设置为3;如果jq程序运行,则设置为0。
所以你需要jq -e 'select(. | index("rem"))'

相关问题