以下のような長めの配列を含むJSONがほしい場合、
{
"odd": [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31],
"even": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30]
}
jqでpretty-printすると配列が要素ごとに改行されます。
$ echo '{"odd":[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31],"even":[0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30]}' | jq
{
"odd": [
1,
3,
5,
7,
9,
11,
13,
15,
17,
19,
21,
23,
25,
27,
29,
31
],
"even": [
0,
2,
4,
6,
8,
10,
12,
14,
16,
18,
20,
22,
24,
26,
28,
30
]
}
このような出力だと大きなJSONファイルのときは行数が膨大になって扱いにくいと思います。 私が最近作ったCamelliaのZig実装のcamellia-zigではテストベクターにJSONファイルを使っていますが、配列が要素ごとに改行された結果、5万行近いJSONファイルになって困っていました。 コンパクト出力を使えば行数は減らせますが、全体がコンパクト出力になるのは望んでいませんでした。 上記の問題を解決したかったので、最初の例のように配列を要素ごとに改行しないで出力する方法を調べました。
方法
jqlang/jq#643のコメントのddopson/underscore-cliを使う方法で最初の例のように出力できました。
$ echo '{"odd":[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31],"even":[0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30]}' | jq | npx underscore pretty --outfmt json
{
"odd": [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31],
"even": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30]
}
この方法でテストベクターファイルの行数を5,000行程度まで減らすことができました。
終わりに
もっと良い方法があったら教えてもらえると嬉しいです。