我的要求听起来微不足道,但我找不到办法。我输入了一个JSON对象数组:
[
{
"foo": 1,
"bar": 2
},
{
"foo": 3,
"bar": 4
},
(...)
]
我想要输出相同的JSONL版本,即每行一个对象,而不是数组:
{ "foo": 1, "bar": 2 }
{ "foo": 3, "bar": 4 }
(...)
与使用--compact-output
相同,因为这会保留数组并给我:
[ { "foo": 1, "bar": 2 }, { "foo": 3, "bar": 4 }, (...) ]
提前谢谢。
答案 0 :(得分:14)
原始问题的答案是将过滤器.[]
与-c
命令行选项一起使用:
$ jq -c '.[]'
答案 1 :(得分:0)
如果输入数组太大而无法放入内存,则可以使用jq的所谓“流解析器”。
这里是使用通用方法的说明,即,它不对顶级数组中的项目做任何假设:
$ echo '[{"foo":"bar"},99,null,{"foo":"baz"}]' |
jq -cn --stream 'fromstream( inputs|(.[0] |= .[1:]) | select(. != [[]]) )'
{"foo":"bar"}
99
null
{"foo":"baz"}
$
答案 2 :(得分:-1)
发现:它的
map(tostring) | reduce .[] as $item (""; . + $item + "\n")
您还需要使用--raw-output
。