Home > Mobile >  JQ using not with IN does not work or have any effect?
JQ using not with IN does not work or have any effect?

Time:03-24

This code works as expected:

jq --argjson BL ${BL} '.rows[] | select(.cells[] | .value | IN($BL[]))

It returns a list of elements that contain a value in $BL

I want to return all those that are not in $BL, so I use | not

It returns the exact same result as without the | not, it seems to make no difference.

jq --argjson BL ${BL} '.rows[] | select(.cells[] | .value | IN($BL[]) | not)

using the following retuned nothing at all

jq --argjson BL ${BL} '.rows[] | select(.cells[] | .value | IN($BL[]|not))

is there a simple thing I'm missing with using IN with NOT?

for reference $BL is and array on email address, trying to make an api call and return all elements that don't have an email listed in $BL

CodePudding user response:

Your select receives a series of boolean values, one for each item in the .cells array. Using not inverts all of them, which means if you had a mixed set of boolean values, it would still be mixed, and in either case select would take those being evaluated to true.

The solution is to use any or all to aggregate these boolean values. Without any sample data, I assume you are looking for

.rows[] | select(any(.cells[]; .value | IN($BL[])) | not)
  • Related