JSON5 → JSON
整形処理はすべてブラウザ内で完結します。データは送信されません
JSON5 を標準の JSON に変換します。JSON5 は JSON のスーパーセットで、コメント(`//` と `/* */`)、引用符なしのキー(非 ASCII の識別子も可)、シングルクォート文字列、末尾カンマ、16進数、先頭の `+`、`.5` / `5.` の書き方、そして `Infinity` と `NaN` を追加しています —— 各種の設定ファイル(VS Code、Babel、TypeScript や ESLint の一部)が使う一方、多くのツールは厳密な JSON しか受け付けません。 方向が1つしかないのには理由があります:JSON はもともと JSON5 の部分集合なので、「JSON → JSON5」は恒等変換です。オプションとして用意すると、何か別のことをする(コメントを付ける? シングルクォートに変える?)と誤解させるだけです。その方向が必要なら、標準の JSON 文書はそのまま有効な JSON5 文書です —— そのまま使ってください。 実装は「とりあえず動く」サブセットではなく完全なものです —— `\x41`、`\u{1F600}`、行継続、`+Infinity` も仕様どおりに処理し、エラーは行と列を示します。 ⚠️ 既知の変換上の損失が2つあります:JSON は `Infinity` と `NaN` を表現できないため `null` になります。またコメントは必ず失われます(JSON にコメントを置く場所がないためです)。
機能
- コメント:`//` 行コメントと `/* */` ブロックコメント。文書内のどこにあっても処理します
- 引用符なしのキー。非 ASCII の識別子や `$` `_` で始まるものも可
- シングルクォート文字列(二重引用符をエスケープせずにそのまま書けます)
- 末尾カンマ:オブジェクト・配列・入れ子の構造すべてに対応
- 16進数 `0xFF`、先頭の `+`、`.5` / `5.` の書き方
- `Infinity`・`-Infinity`・`NaN`(JSON にはこの3つがありません)
- `\x41`・`\u{1F600}`・行継続といったエスケープを仕様どおりに処理
- 解析エラーは具体的な行と列を示します。「書式が違います」の一言では終わりません
- ⚠️ `__proto__` というキーは普通のプロパティになり、プロトタイプを汚染しません
- 出力は標準 JSON なので、JSON しか受け付けないツールでもそのまま読めます
使い方
- JSON5 を貼り付けます(コメント、引用符なしキー、末尾カンマすべて可)
- 結果はその場で更新されます
- インデントを選ぶか、1行にまとめます
- コピーして結果を取り出します
よくある質問
- 「JSON → JSON5」の方向がないのはなぜですか?
- 恒等変換だからです。 JSON5 は JSON の厳密なスーパーセット(それが設計目標でした)なので、有効な JSON 文書はそのまま有効な JSON5 文書です —— 変換するものがありません。ボタンにすると、何もしない(壊れているように見える)か、勝手に手を加える(キーの引用符を外す、シングルクォートに変える)かのどちらかになり、後者はスタイルの選択であり、ツールが利用者に代わって決めるべきものではありません。
- コメントはどこへ行ったのですか?
- 失われます。そして失うしかありません:JSON の構文にはコメントを保持できる場所がなく、標準の JSON はコメントを禁止しています。これは形式間の違いであり、この実装の判断ではありません。コメントが重要な場合(設定の説明、コメントアウトしたフラグなど)は、使い捨ての中間物として扱わず、元のファイルを保管してください。
- Infinity と NaN が null になったのは不具合ですか?
- いいえ。ただし実際の損失です —— JSON にはそれらを表現する方法がありません。`JSON.stringify(Infinity)` の結果が `null` になるのは言語の仕様で、標準 JSON を出力するツールはどれも同じです。JSON5 が `Infinity` / `NaN` を許すのは拡張機能の一つで、標準 JSON に対応する構文はありません。データにこれらの値がある場合に必要なのは「文字列 `"Infinity"` で表す」といった取り決めで、消費側と合意する必要があります。変換ツールが勝手に決められることではありません。
- パーサーは自作ですか、ライブラリですか?
- 自作です。理由は当サイトの YAML / TOML ツールとは逆です。あちらは「同じことを10通りに書ける」ことが複雑さの源で、自作のサブセットはいずれどこかで黙って誤解釈するため、成熟したライブラリを使っています。一方 JSON5 の文法は閉じて凍結しており(2018 年の 1.0 以降変更なし)、JSON にコメント・引用符なしキー・シングルクォート・末尾カンマを足しただけなので、完全な実装は十分に手が届きます。正しさは差分テストで担保しています:有効な JSON の入力に対し、このパーサーの結果は `JSON.parse` とフィールド単位で一致しなければなりません。
関連ツール
JSON 整形
整形JSON をブラウザ内で整形・圧縮・検証。折りたたみ可能なツリーで表示し、キーと値の検索、行番号とハイライト付きの編集、Python dict への変換にも対応。
JSONL 変換
整形JSONL(NDJSON)と JSON 配列を双方向に変換。行単位で解析し、失敗した行番号を示します。空行のスキップ、CRLF と BOM にも対応。すべてブラウザ内で処理します。
JS 圧縮と整形
整形JavaScript をオンラインで圧縮・整形。圧縮はコメントと空白を削除(/*! のライセンス表記は保持)、整形は波括弧とセミコロンで組み直します。
JSON → コード
整形JSON サンプルから TypeScript interface、Go struct、Java class、Rust struct を生成。欠けたキーは任意に、型の衝突は共用型に。すべてブラウザ内で処理します。
SQL 整形
整形SQL をオンラインで整形:キーワードの大文字小文字を統一し、SELECT / FROM / WHERE などの句ごとに改行。圧縮は余分な空白とコメントを削除します。
XML 整形
整形XML をオンラインで整形・圧縮:タグの階層ごとにインデントし、コメント・CDATA・DOCTYPE はそれぞれ別の行に。属性値の中の空白はそのまま保持します。