私の要求は些細なことのように聞こえますが、それを行う方法を見つけることができませんでした。入力としてJSONオブジェクトの配列があります。
[
{
"foo": 1,
"bar": 2
},
{
"foo": 3,
"bar": 4
},
(...)
]
そして、出力として、同じもののJSONLバージョン、つまり配列ではなく、行ごとに1つのオブジェクトが必要です。
{ "foo": 1, "bar": 2 }
{ "foo": 3, "bar": 4 }
(...)
これはnot--compact-output
を使用するのと同じです。これにより、配列が保持され、次のようになります。
[ { "foo": 1, "bar": 2 }, { "foo": 3, "bar": 4 }, (...) ]
前もって感謝します。
元の質問に対する答えは、フィルター.[]
を-c
コマンドラインオプションと一緒に使用することです。
$ jq -c '.[]'
入力配列が大きすぎてメモリに収まらない場合は、jqのいわゆる「ストリーミングパーサー」を使用できます。
これは、一般的なアプローチを使用した図です。つまり、最上位の配列の項目については何も想定していません。
$ echo '[{"foo":"bar"},99,null,{"foo":"baz"}]' |
jq -cn --stream 'fromstream( inputs|(.[0] |= .[1:]) | select(. != [[]]) )'
{"foo":"bar"}
99
null
{"foo":"baz"}
$