Использование JQ не с IN не работает или не имеет никакого эффекта?

Этот код работает так, как ожидалось:

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

Возвращает список элементов, содержащих значение в $BL.

Я хочу вернуть все те, которых нет в $BL, поэтому я использую | нет

Он возвращает тот же результат, что и без | нет, вроде без разницы.

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

Убедитесь, что вы предоставляете минимальный воспроизводимый пример. Если нам нужно создать собственные данные для проверки вашего выражения, меньшее количество людей будет работать над вашей проблемой или, по крайней мере, предоставит решения проверено. (В той степени, в которой вы можете сделать выражение максимально простым, что позволит вам продемонстрировать проблему, это также может сделать данные, необходимые для ее тестирования, короче / проще / проще).

Charles Duffy 23.03.2022 02:39

... и кстати, я думаю, вы хотите --argjson BL "$BL", если только этот код не предназначен только для людей, использующих zsh; без кавычек он будет работать неправильно в других оболочках POSIX-y, когда ваши данные содержат пробелы (или символы глобуса в оболочке с включенными nullglob или failglob).

Charles Duffy 23.03.2022 02:40
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
2
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш select получает ряд логических значений, по одному для каждого элемента в массиве .cells. Использование not инвертирует их все, что означает, что если бы у вас был смешанный набор логических значений, он все равно был бы смешанным, и в любом случае select перенесет те, которые оцениваются, в true.

Решение состоит в том, чтобы использовать any или all для агрегат этих логических значений. Без каких-либо образцов данных, я предполагаю, что вы ищете

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

Другие вопросы по теме