Подтвердить что ты не робот

Как приятно удалить пустой массив в jq

Я читаю O'Reilly новую "науку о данных в командной строке" и столкнулся с трудностями при использовании jq. У меня есть JSON (возвращенный из API статей NYTimes). Я разбираюсь в jq следующим образом:

jq -c \
'[.response.docs[] | {date: .pub_date, type: .document_type, title: .headline.main }]' \
< myjsonfile.json

Итак, я ищу "ответ": "docs" (который является массивом), а затем сопоставляет каждый элемент в этом массиве с "pub_type" и т.д., переименовывая его и т.д. Это отлично работает, но в конце добавляет пустой массив:

[{"date":"2009-01-02T00:00:00Z","type":"article","title":"SPARE TIMES: AROUND TOWN"},  
{"date":"2009-01-02T00:00:00Z","type":"article","title":"Catskill Home Prices: How Low Will They Go?"},
{"date":"2009-01-01T00:00:00Z","type":"article","title":"Ominous Cutbacks At Chanel"}]
[] 

Как избавиться от пустого массива? Мое решение прямо сейчас состоит в том, чтобы передать выход обратно в jq, но это кажется субоптимальным. Итак, это работает:

jq -c \
'[.response.docs[] | {date: .pub_date, type: .document_type, title: .headline.main }]' | \
< myjsonfile.json | 
jq 'if length > 0 then . else empty end'

Но это кажется уродливым. Есть ли лучший способ сделать это?

4b9b3361

Ответ 1

Используйте фильтр select, где length > 0.

select(length > 0)