jq: выбрать вложенное поле JSON и отфильтровать массив

Категория: Bash · Язык: Bash · Обновлено:

jq разбирает JSON-структуру, поэтому надёжнее grep для вложенных полей. Оператор [] перебирает массив, а select оставляет только элементы, которые соответствуют условию. ????? ??????????? ?????????? ???????? ?????? ??????? ? ????????? ?????? ? ??????? ?????.

Рабочий пример

Bash
printf '%s\\n' '{\"items\":[{\"id\":7,\"active\":true},{\"id\":8,\"active\":false}]}' | jq -r '.items[] | select(.active) | .id'

Флаг -r печатает строки без JSON-кавычек. Для необязательного поля используйте оператор ? и default через //, например .name // "unknown".

Частый вопрос

Как вывести весь активный объект?

Уберите последний селектор .id и добавьте -c для компактного JSON: jq -c .items[] | select(.active).