Я читаю 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'
Но это кажется уродливым. Есть ли лучший способ сделать это?