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行にまとめる
使い方
- JSONL を貼り付けるか、JSON 配列を貼り付けます
- 複数行の JSONL は自動判別します。1行だけの JSON オブジェクトは方向を手動で指定してください
- 結果はその場で更新されます
- コピーして結果を取り出します
よくある質問
- 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 では空白に意味がないため、内容には影響しません。
関連ツール
JSON 整形
整形JSON をブラウザ内で整形・圧縮・検証。折りたたみ可能なツリーで表示し、キーと値の検索、行番号とハイライト付きの編集、Python dict への変換にも対応。
CSV 変換
整形CSV / TSV と JSON を双方向に変換。区切り文字の自動判別、引用符とフィールド内改行の正しい処理、Excel の BOM 除去、数値は無損失のときだけ変換します。
JSON → コード
整形JSON サンプルから TypeScript interface、Go struct、Java class、Rust struct を生成。欠けたキーは任意に、型の衝突は共用型に。すべてブラウザ内で処理します。
SQL 整形
整形SQL をオンラインで整形:キーワードの大文字小文字を統一し、SELECT / FROM / WHERE などの句ごとに改行。圧縮は余分な空白とコメントを削除します。
JSON5 変換
整形JSON5 を標準 JSON に変換。コメント・引用符なしキー・シングルクォート・末尾カンマ・16進数・Infinity に対応し、エラーは行と列を示します。
XML 整形
整形XML をオンラインで整形・圧縮:タグの階層ごとにインデントし、コメント・CDATA・DOCTYPE はそれぞれ別の行に。属性値の中の空白はそのまま保持します。