如何优雅地在jq中删除空数组

37

我正在阅读O'Reilly新书《命令行下的数据科学》,但在使用jq时遇到了一些问题。我有一些JSON(从纽约时报文章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'

但这感觉很丑。有更好的方法吗?

1个回答

62

使用 select 过滤器,其中长度大于 0。

select(length > 0)

27
如果你想基于属性的长度筛选对象,可以使用select(.MyArrayProperty | length > 0) - taryn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接