JSON フォーマットツール
JSONフォーマットとは?
JSON(JavaScript Object Notation)は軽量のデータ交換フォーマットで、人間にとって読み書きしやすく、機械にとっても解析・生成しやすい形式です。JSONフォーマットツールは、圧縮されたJSONデータをインデント整然とした読みやすいフォーマットに変換し、シンタックスハイライト、エラー検出、データ検証機能を提供します。
使い方
使い方
- 左の入力ボックスにJSONデータを貼り付けるか入力します
- インデントサイズを選択します(スペース2個、スペース4個、またはタブ)
- 「フォーマット」をクリックして整形するか、「ミニファイ」をクリックして空白を削除します
- 右側にシンタックスハイライト付きで結果が自動表示されます
- 「コピー」または「ダウンロード」をクリックして結果を保存します
JSON検証に関する注意
- 整形はテキストが有効なJSONであることを示しますが、ビジネススキーマに合致するかどうかは保証しません。
- エラーが表示されたら、報告された行と列でシングルクォート、末尾のカンマ、コメント、エスケープされていない制御文字を確認してください。
利用シーン
仕組み
JSON(JavaScript Object Notation)はRFC 8259 / ECMA-404で定義されています。文法はJavaScriptオブジェクトリテラルの厳密なサブセットであり、文字列はダブルクォートで囲む必要があり、キーはクォートが必要で、末尾カンマは禁止、コメントも許可されません。フォーマッターは`JSON.parse()`でドキュメントをホスト言語のオブジェクトグラフにパースし、`JSON.stringify(value, replacer, indent)`で再シリアライズします。indentは数値(1〜10スペース)または文字列(`'\t'`)です。パースはO(n)で、出力構築で新しい文字列が確保されるため、一般的にstringifyフェーズより高速です。 数値の処理はIEEE 754倍精度に従います。`Number.MAX_SAFE_INTEGER`(2^53 - 1 = 9007199254740991)より大きい整数は精度が失われるため、`9007199254740993`は`9007199254740992`にラウンドトリップします。`0.1 + 0.2`のような小数の繰り返しはパース後に`0.30000000000000004`になります。Unicode文字列はサロゲートペアを含む`\uXXXX`エスケープをサポートし(`\uD83D\uDE00` → 😀)、パーサーは孤立したペアになっていないサロゲートを拒否します。空白は文字列内でのみ意味を持ち、トークン間のスペース、タブ、LF、CRの任意の組み合わせは同一にパースされます。 一般的な非標準の緩和仕様にはJSON5(コメント、末尾カンマ、クォートなしキー)とJSONC(VS Code設定)があります。標準JSONではこれらは許可されず、`JSON.parse`は遭遇すると`SyntaxError`をスローします。NDJSON(1行1オブジェクト)やJSON Linesのようなストリーミング代替手段はドキュメント全体をメモリに読み込まずに処理できます。深くネストされた入力では、V8のスタック制限(約10,000フレーム)が再帰ベースのパーサーの上限となります。プロダクション向けパーサーは反復的なステートメントマシンを使用してこの制限を解除します。
- RFC 8259 / ECMA-404文法 - 6つの値型(オブジェクト、配列、文字列、数値、true/false、null)。文字列はダブルクォート必須、キーはクォート必須、末尾カンマ不可、コメント不可。
- `JSON.parse(text)`はO(n)で実行され、無効な入力には文字オフセット付きの`SyntaxError`をスローする。`JSON.stringify(value, replacer, indent)`は2〜10スペースまたは`'\t'`インデントでフォーマットされた出力を生成する。
- IEEE 754の数値精度:`Number.MAX_SAFE_INTEGER = 2^53 - 1`。これを超える整数は最も近い表現可能な倍精度に丸められるため、チャットIDやTwitter Snowflake IDは文字列として扱う必要がある。
- Unicode `\uXXXX`エスケープはBMP全体をサポート。非BMP文字はサロゲートペアエンコーディング`\uD83D\uDE00`が必要。パーサーはRFC 8259 §8.2に基づき孤立したペアになっていないサロゲートを拒否する。
- よくあるパース失敗:シングルクォート文字列(`'foo'`)、配列/オブジェクトの最後の要素の後の末尾カンマ、文字列内のエスケープされていない制御文字、エスケープされていないバックスラッシュ、閉じ`}`/`]`の欠落、先頭のBOM(`\uFEFF`)。
- 循環参照は`JSON.stringify`で`TypeError: cyclic object value`をスローする。WeakSetを使ったreplacerコールバックでサイクルを断つか、`flatted` / `json-stringify-safe`などのライブラリを使用する。
- 非標準バリアント:JSON5(`.json5`、コメントと末尾カンマを許可)、JSONC(VS Code設定)、NDJSON / JSON Lines(1行1オブジェクト、ストリーミング向け) - いずれも厳密な`JSON.parse`では拒否される。
使用例
オブジェクトの例
入力:
{
"name": "ToolAct",
"type": "web tool",
"active": true
}
出力: 2 スペースインデントとキー順序を保ったまま整形表示配列の例
入力: [1,2,3,"a","b","c"]
出力: 2 スペースインデントで整形。数値は数値のまま、文字列はクォートを保持ネスト構造
入力:
{"user":{"name":"Alex","skills":["JavaScript","Python"]}}
出力:
{
"user": {
"name": "Alex",
"skills": [
"JavaScript",
"Python"
]
}
}
備考: ネストしたオブジェクトと配列は再帰的にインデントされます。インデント幅はツールバーで選択可能よくある質問
フォーマッタは何をしますか?
JSON を整形します。指定したインデント (2 または 4 スペース) でプリティプリントするか、1 行にミニファイします。解析と同時に検証するため、構文エラーは行と列とともに報告されます。
私の JSON が無効と判定されるのはなぜですか?
よくある原因は、末尾カンマ (JS では合法、JSON では不可)、シングルクォート文字列 (ダブルクォート必須)、クォートなしのキー、コメント (// や /* */)、括弧の欠落です。本ページは解析失敗位置を報告します。JSON5 や JSONC (コメント付き JSON) は JSON のスーパーセットなので、それらには別のパーサーを使用してください。
キーの順序は維持されますか?
JSON 仕様ではキーの順序は重要ではないとされていますが、ほとんどのパーサーはラウンドトリップ時に順序を保ちます。本ツールでは挿入順を維持するため、読みやすい diff には通常そちらが望ましいです。
非常に大きな JSON ファイルも処理できますか?
最近のブラウザは 10〜50 MB の JSON ファイルを扱えますが、エディタの動作が遅くなることがあります。数百 MB のファイルにはストリーミングパーサー (jq コマンドライン、ndjson ツール) を使用してください。ブラウザのパーサーはツリー全体をメモリに読み込みます。
私の JSON はアップロードされますか?
いいえ。解析とフォーマットは JSON.parse と JSON.stringify を使用してブラウザ内で実行されます。貼り付けた JSON は送信されません。
大きな数値で精度が失われるのはなぜですか?
JavaScript の JSON.parse は IEEE 754 倍精度の Number を使用します。2^53 を超える整数は精度を失います (例えば 9007199254740993 は黙って丸められます)。BigInt や文字列保持パーシングが必要な場合は、カスタムパーサーを使うか、生成側で大きな数値を文字列としてマークしてください。
JSONC (コメント付き JSON) はどうですか?
厳密な JSON ではコメントは禁止されています。一部の IDE (VS Code 設定ファイル) では // と /* */ コメントを追加した JSONC を使用します。フォーマッタは通常、コメントを保持する「JSONC」モードをサポートしています。厳密モードではコメントは構文エラーとなります。