ToolActToolAct

JSON フォーマットツール

JSON入力
フォーマット出力
行数: 1文字数: 0バイト数: 0
行数: 1文字数: 0

JSONフォーマットとは?

JSON(JavaScript Object Notation)は軽量のデータ交換フォーマットで、人間にとって読み書きしやすく、機械にとっても解析・生成しやすい形式です。JSONフォーマットツールは、圧縮されたJSONデータをインデント整然とした読みやすいフォーマットに変換し、シンタックスハイライト、エラー検出、データ検証機能を提供します。

使い方

使い方

  1. 左の入力ボックスにJSONデータを貼り付けるか入力します
  2. インデントサイズを選択します(スペース2個、スペース4個、またはタブ)
  3. 「フォーマット」をクリックして整形するか、「ミニファイ」をクリックして空白を削除します
  4. 右側にシンタックスハイライト付きで結果が自動表示されます
  5. 「コピー」または「ダウンロード」をクリックして結果を保存します

JSON検証に関する注意

  • 整形はテキストが有効なJSONであることを示しますが、ビジネススキーマに合致するかどうかは保証しません。
  • エラーが表示されたら、報告された行と列でシングルクォート、末尾のカンマ、コメント、エスケープされていない制御文字を確認してください。

利用シーン

APIレスポンスをブラウザのまま確認する圧縮されたレスポンス本文を貼り付けて、スペース2個、スペース4個、またはタブでネストされたオブジェクトと配列を展開します。解析エラーには可能な限り計算された行番号と列番号が含まれるため、不正なレスポンスをドキュメント全体を目視で探さずに修正できます。
コミットとレビュー用にJSONを整える設定、サンプルフィクスチャ、翻訳データに安定したレイアウトが必要な場合、フォーマッターは選択したインデントで決定論的な出力を生成します。同じデータを環境変数やリクエストフィールドにコピーする必要がある場合は、逆方向の圧縮モードも利用できます。
機密データをローカルで安全に扱うパーサー、フォーマッター、圧縮、コピー、ダウンロードの各ステップはすべてブラウザ内で実行され、トークン、顧客フィールド、内部フィーチャーフラグ、未公開のAPI構造がサードパーティのビューティファイアに渡ることはありません。出力はOpenAPIやJSON Schema仕様と別途検証してください。フォーマットはドキュメントが解析可能であることを示しますが、データがコンシューマーの期待する契約に合致することまでは証明しません。大きな数値フィールドでのサイレントな型変換にも注意してください。
2つのJSONペイロードをフィールド単位で比較する旧バージョンと新バージョンのレスポンスを同じインデントでフォーマットし、diffビューアーで並べて、リネームされたキー、型の変更、nullと欠落フィールドの違いを発見します。特にWebhookペイロードでは、1つのフィールドの入れ替えがコンシューマーを壊すことがあるため、生の圧縮JSONを目視スキャンするより高速です。
環境変数やcurlペイロード用に圧縮する圧縮モードに切り替えて、大きな設定ブロブを1行の環境変数、.envファイル、またはcurl --data引数に収めます。その後ターゲットパーサーで確認してください。一部のHTTPクライアントは数百キロバイトを超える非常に長い1行の本文にまだ対応していないためです。厳密なJSON(RFC 8259)は末尾のカンマとコメントを禁止しているため、入力がJSON5やHJSONの場合、厳密なパーサーは`//`で始まる行や`,]`で終わる行を拒否します。その場合は寛容モードを有効にするか、フォーマット前にコメントを除去してください。2^53を超える大きな整数値はJavaScriptがIEEE-754倍精度で表現するため精度が失われます。

仕組み

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」モードをサポートしています。厳密モードではコメントは構文エラーとなります。