このツールの動作
改行区切りの JSON が入り、配列が出ます。
{"id": 1, "name": "Ada"}
{"id": 2, "name": "Grace"}
[
{
"id": 1,
"name": "Ada"
},
{
"id": 2,
"name": "Grace"
}
]
形式はこれだけです。一行に JSON の値ひとつ、あいだにカンマは無く、まわりに角括弧もありません。ログの処理系が書き出す形であり、bq load や多くのストリーム API が期待する形であり、jq -c が作る形です。
壊れた行は名指しされる
{"a": 1}
{oops}
Invalid JSON on line 3
空行は何も言わずに読み飛ばします。NDJSON ファイルはたいてい空行で終わります。壊れた行は変換を止め、知らせにはその行番号が入るので、まっすぐそこへ行けます。途中までの配列は返しません。記録が半分だけあって、それを告げるものが何も無い状態は、誤りよりたちが悪いからです。
長い数は桁を保つ
{"id": 12345678901234567890}
[
{
"id": 12345678901234567890
}
]
十六桁あたりを超えると、JavaScript の数値は正確ではなくなります。その ID を数として読めば、黙って別の数が返ってきます。ここでは読み取りも書き出しも書かれたままの文字を保ちます。Twitter や Discord の ID を並べたファイルが往復に耐えるのは、そのためです。
しないこと
- 並べ替えや重複の削除。 配列は来た順に行を保ち、繰り返しもそのまま残します。
- オブジェクトの強制。 一行はどの JSON の値でも構いません。
1、"x"、nullも正当な記録で、そのまま通ります。 - 一行の分割。 一行に二つの値があれば、それは二つの記録ではなく誤りです。
プライバシー
すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。