此代码按预期工作:
jq --argjson BL ${BL} '.rows[] | select(.cells[] | .value | IN($BL[]))
它返回一个元素列表,其中包含$BL 中的值
我想返回所有不在$BL中的,所以我使用|而不是
它返回的结果与没有|not的结果完全相同,似乎没有什么区别。
jq --argjson BL ${BL} '.rows[] | select(.cells[] | .value | IN($BL[]) | not)
使用下面的重新调谐什么都没有
jq --argjson BL ${BL} '.rows[] | select(.cells[] | .value | IN($BL[]|not))
使用IN和NOT有没有遗漏一件简单的事情?
作为参考,$BL是和电子邮件地址上的数组,试图进行api调用并返回$BL 中没有列出电子邮件的所有元素
您的select
接收一系列布尔值,.cells
数组中的每个项都有一个布尔值。使用not
会反转所有这些值,这意味着如果您有一组混合的布尔值,它仍然是混合的,并且在任何一种情况下,select
都会将正在计算的值转换为true
。
解决方案是使用any
或all
来聚合这些布尔值。如果没有任何样本数据,我想你正在寻找
.rows[] | select(any(.cells[]; .value | IN($BL[])) | not)