web-dev-qa-db-ja.com

jqで空の配列をうまく削除する方法

O'Reillyの新しい「コマンドラインでのデータサイエンス」を読んでいて、jqの使用で問題が発生しています。私はいくつかのJSON(NYTimes Articles APIから返されます)を持っています私は次のようにjqで解析しています:

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

そのため、「response」:「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'

しかし、それは醜い感じです。これを行うためのより良い方法はありますか?

17
Gabriel Perdue

長さが0より大きい場合はselectフィルターを使用します。

select(length > 0)
24
Jeff Mercado