28

我正在阅读 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'

但这感觉很丑。有没有更好的方法来做到这一点?

4

1 回答 1

46

使用select长度 > 0 的过滤器。

select(length > 0)
于 2014-10-04T20:02:31.140 回答