piapia123
ja

JSONL / NDJSON ↔ JSON 相互変換

整形

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

JSONL(NDJSON とも呼ばれ、1行に1つの JSON)を JSON 配列にまとめたり、逆に JSON 配列を1行ずつに分解したりします。ログ、データのエクスポート、ストリーミング API の出力で頻繁に使われる形式です。 「1行に1つの JSON」がこの形式の規約のすべてなので、ここでは行単位で解析し、失敗したときは何行目かを示します —— 数千行のデータで「解析に失敗しました」だけでは何の役にも立ちません。空行はスキップし(末尾の改行は普通のことです)、CRLF と BOM にも対応しています。 ⚠️ よくある誤用:整形された複数行の JSON を貼り付けても動きません。似て見えますが JSONL ではありません —— 各行が単体で完全な JSON である必要があります。その場合は理由を明示してエラーにします。 ⚠️ ここでは解決できない精度の問題:2^53 を超える整数は JSON に収まりません(Twitter などのスノーフレーク ID が典型です)。`JSON.parse` は `9007199254740993` を `...992` に変えてしまいます。これは JSON と JavaScript の本質的な問題で、`JSON.parse` を使うあらゆるツールが同じです。そのような ID がある場合は、上流に文字列で出力させてください。

機能

  • 双方向:JSONL → JSON 配列、JSON 配列 → JSONL
  • 行単位で解析し、失敗時は何行目かを示します(スキップした空行も含めた元ファイルの行番号)
  • 空行はスキップ、CRLF / LF どちらも可、先頭の BOM は除去
  • 整形された複数行の JSON を貼り付けた場合は、明示的にエラーにし「各行が単体で完全な JSON である必要がある」と説明します
  • JSON → JSONL では最上位が配列かを検証し、黙って1行だけ出力することはしません
  • 文字列内の改行はエスケープされ、出力の各行は単体で解析可能なままです
  • JSON のインデントは 2 / 4 スペース、タブ、または1行にまとめる

使い方

  1. JSONL を貼り付けるか、JSON 配列を貼り付けます
  2. 複数行の JSONL は自動判別します。1行だけの JSON オブジェクトは方向を手動で指定してください
  3. 結果はその場で更新されます
  4. コピーして結果を取り出します

よくある質問

JSON を貼り付けたら配列が必要と言われるのはなぜですか?
「1つの JSON 文書」と「JSONL の1行」は見分けがつかないからです —— 単独の `{"a":1}` は正しい JSON 文書であると同時に、正しい JSONL の1行でもあり、この曖昧さは自動では解消できません。そのため自動モードでは、JSON として解析できる入力は「JSON → JSONL」として扱い、その方向は最上位が配列であることを要求します(各要素が1行)。単一のオブジェクトを JSONL の1行として扱いたい場合は、方向を手動で「JSONL → JSON」にしてください。
整形された JSON を貼り付けたらエラーになるのはなぜですか?
JSONL ではないからです。JSONL の規約は各行が単体で完全な JSON であることで、整形された JSON は1つのオブジェクトを複数行に分けています —— 1行目の `{` だけでは正しい JSON になりません。このツールは行単位で解析するため、1行目でエラーになり、その旨を伝えます。先にその JSON を1行に圧縮するか(当サイトの JSON 整形ツールに「コンパクト」があります)、配列として貼り付けて逆方向に処理させてください。
大きな整数(Twitter の ID など)は精度を失いますか?
失います。そしてここでは防げません。 2^53 を超える整数は JavaScript の数値型で正確に表せず、`JSON.parse` は `9007199254740993` を `9007199254740992` に変えてしまいます —— 下位桁が黙って失われます。これは JSON と JavaScript の本質的な問題で、この実装の欠陥ではありません:`JSON.parse` を使うあらゆる場所(ブラウザの `response.json()` を含む)が同じです。唯一の解決策は、上流にそのような ID を文字列として出力させることです(`"9007199254740993"`)。それなら1文字も失われません。
空行は空のレコードになりますか?
いいえ、スキップします。末尾の改行や、レコード間の余分な空行は編集時の普通のことです。それらを `null` や空文字列のレコードに変えても、データが汚れるだけです。各行の前後の空白も同様に取り除きます —— JSON では空白に意味がないため、内容には影響しません。

関連ツール