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

NDJSONをJSONに変換|jqに渡せるひとつの配列にする

改行区切りのJSONをひとつの配列にまとめます。空行は読み飛ばし、壊れた行は行番号で知らせるので、どこを直せばいいかがすぐに分かり、ファイル中を探し回らずに済みます。

高速 プライベート Cookieゼロ
インデント

NDJSON 入力

JSON 出力

このツールの動作

改行区切りの 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だけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

一行が壊れていたらどうなりますか。
変換は止まり、どの行かを告げます。`Invalid JSON on line 3` のように。途中までの結果は返しません。半分の配列は結果らしく見えてしまい、抜けた記録をそのまま次の工程へ運ぶことになるからです。その行を直して、もう一度変換してください。
長い数値の ID は保たれますか。
はい、桁のまま保たれます。19桁の ID は JavaScript の数値が正確に保てる範囲を超えており、それを数として読む変換器は、何も言わずに隣の値を返します。ここでは読み取りも書き出しも文字のままを保つので、`12345678901234567890` はそれ自身として出てきます。
一行とは何を指しますか。
JSON の値ひとつ分です。空行は読み飛ばし、`\r\n` の行末も、先頭のバイト順マークも問題になりません。ただし同じ行に二つのオブジェクトがある場合、それは二つの記録ではありません。その行は不正として報告されます。NDJSON は一行に一つの値を置く形式で、どこで切るかを推し量ればデータを作り出すことになるからです。

関連ツール