用jq从数组中删除空字符串?

lee*_*d00 2 arrays json jq

如何从jq中的数组中删除空字符串项?

这是我最好的猜测,但它似乎不起作用:

尝试

echo '["bob","","tim",""]' | jq '[ . [] | if length > 0 then . end ]'
Run Code Online (Sandbox Code Playgroud)

期望的输出:

["bob", "tim"]
Run Code Online (Sandbox Code Playgroud)

错误:

. [] | if length > 0 then . end                            
jq: error: Possibly unterminated 'if' statement at <top-level>, line 1:
. [] | if length > 0 then . end       
jq: 2 compile errors
Run Code Online (Sandbox Code Playgroud)

use*_*693 11

添加"else empty"会得到正确的结果

jq '[ .[] | if length > 0 then . else empty end ]'
Run Code Online (Sandbox Code Playgroud)

考虑使用select代替.

jq '[ .[] | select(length > 0) ]'
Run Code Online (Sandbox Code Playgroud)

由于map(x)相当于[.[] | x],我们可以做到这一点.

jq 'map(select(length > 0))'
Run Code Online (Sandbox Code Playgroud)