100% ローカル — データがブラウザの外に出ることはありません

JSONをNDJSONに変換|一行にひとつの記録という形にする

JSONの配列を改行区切りJSONに変換します。一行にひとつの文書、圧縮済みなので、bq load やログ処理、ストリームAPIに一件ずつそのまま流し込めます。

高速 プライベート Cookieゼロ

JSON 入力

NDJSON 出力

このツールの動作

JSON の配列が、一行に一つの JSON 文書になります。

[
  { "id": 1, "name": "Ada" },
  { "id": 2, "name": "Grace" }
]
{"id":1,"name":"Ada"}
{"id":2,"name":"Grace"}

各行は最小化されます。これは見た目の好みではありません。字下げした文書は何行にもまたがり、NDJSON では改行が次の記録を意味します。字下げとこの形式は両立しません。

根は配列であること

配列が記録の並びです。根にあるオブジェクトは一つの文書であり、それを行に割ることは、その鍵が記録だと決めることになります。この道具はその推測をしません。変換はそこで止まります。

要素のほうに縛りはありません。null、42、"テキスト" はいずれも妥当な JSON 文書であり、したがって妥当な NDJSON の行です。記録は普通オブジェクトですが、ここではそれを求めていません。

長い整数は桁を保つ

[{ "id": 12345678901234567890 }]

は二十桁のまま出ます。JavaScript の数値を経由する変換器は、何も言わずに 12345678901234567000 と書きます。値は変わり、それでもファイルは申し分なく整って見えます。

このツールもまさにそれをしていました。この文章を書く過程で見つけ、直しました。識別子は NDJSON を往復しても今は変わりません。

空の配列は空のファイルになる

[] は何も出力しません。それが正しい答えです。NDJSON には「記録が零件」を書く手段が、空のファイル以外にないからです。つまり空の結果と空の入力は見分けがつきません。何も起きなかったと結論づける前に、知っておく値打ちがあります。

プライバシー

すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

なぜ根が配列でなければならないのですか。
NDJSON は記録の並びであり、その並びが配列だからです。根にあるオブジェクトは一つの文書であって、それが一件の記録なのか、分けるべき集まりなのかを正直に決める方法はありません。推測せずに拒みます。
文字列の中の改行はどうなりますか。
JSON が求めるとおり `\n` と書かれ、行の中にとどまります。これはここでは他より重い意味を持ちます。NDJSON では改行が記録の区切りであり、文書の途中に本物の改行があれば、一件の記録が解析できない二つの半分に割れてしまうからです。
ファイルが百万行の配列ひとつです。問題になりますか。
NDJSON が存在する理由そのものの場面ですが、この変換はそれでも配列全体をメモリに読み込みます。入力は JSON 文書であり、文書は完全でなければ解析できないからです。ある大きさを超えたら、`jq -c ".[]"` のような流し込みの道具が適しています。

関連ツール