JSON 整形・検証ツール

JSON を貼り付けて整形、検証、圧縮できます。エラーは行と列の位置つきで報告されます。

インデント

この JSON 整形ツールでできること

このツールは任意の JSON テキストを受け取り、一貫したインデントで見やすく整形するか、1 行に圧縮(minify)するか、単に有効かどうかを検証します。入力が有効な JSON でない場合、検証機能が解析に失敗した正確な行と列を指し示し、その前後の文字も表示するので、大量のテキストを目で追うことなく、抜けたカンマや引用符のないキーを数秒で直せます。

すべては JavaScript エンジン標準の JSON パーサーを使ってブラウザ内で処理されます。貼り付けたテキストがサーバーに送られることはないため、API のレスポンス、設定ファイル、ログ、トークンや認証情報、個人情報を含むデータでも安心して使えます。

使い方

入力欄に JSON を貼り付けるか入力します。整形は入力に合わせて自動で実行されます。インデントはスペース 2 個、スペース 4 個、タブから選べます。「キーを並べ替え」を有効にすると、すべての階層でオブジェクトのキーがアルファベット順に並び、差分ツールで 2 つの文書を比較しやすくなります。HTTP リクエストや環境変数のためにできるだけ小さなデータが必要なときは「圧縮」をクリックしてすべての空白を取り除きます。「コピー」で結果をクリップボードに入れ、「ダウンロード」で .json ファイルとして保存できます。

ステータスバーにはバイト数、オブジェクトのキー数、最大ネスト深さが表示されるので、大きな文書をどこかに送る前に手早く確認できます。

この検証ツールが見つける JSON のよくある間違い

配列やオブジェクトの最後の要素の後ろにある末尾のカンマは、多くのプログラミング言語では許されていても JSON では許されません。文字列やキーを囲むシングルクォートは無効で、JSON はダブルクォートを要求します。コメントは JSON 仕様に含まれないため、// や /* */ のブロックは失敗します。{name: "x"} のような引用符のないキーは JavaScript のオブジェクトリテラルであって JSON ではありません。NaN、Infinity、undefined といった特殊な値は JSON に存在しません。これらはいずれも、ジャンプできる位置つきの分かりやすいエラーになります。

背景知識:JSON はどこから来たか

JSON(JavaScript Object Notation)は 2000 年代初頭、Douglas Crockford 氏が XML の軽量な代替として、JavaScript に既にあったオブジェクトリテラルの構文をもとに定めたものです。2006 年に RFC 4627 として標準化され、その後 ECMA-404 と RFC 8259(2017 年)が現在の定義となっています。値の型は 6 種類(オブジェクト、配列、文字列、数値、true/false、null)、交換用エンコーディングは UTF-8、コメントはなし。その普及はブラウザ側アプリケーションの普及と歩調を合わせたもので、ブラウザが JSON.parse でネイティブに解析できる形式は、別のパーサーを必要とする形式に勝りました。

使われている場面

ほぼすべての Web API が JSON を返すため、見慣れないレスポンスを受け取ったらまず整形ツールに貼り付けて構造を確認するのが定石です。設定ファイル(package.json、tsconfig.json、VS Code の設定)、インフラ定義(CloudFormation、Terraform の state)、NoSQL データベース(MongoDB のドキュメント、PostgreSQL の jsonb 列)、ログパイプライン(ndjson の 1 行 1 オブジェクト)、JWT トークン のペイロードはすべて JSON です。JSON は URL のクエリパラメータ の中にも入りますが、その場合は先にパーセントエンコードが必要です。関連する形式が JSON を拡張しています。JSON5 と JSONC は設定ファイル向けにコメントと末尾カンマを追加し、JSON Schema は期待される構造を記述し、JSON Lines は 1 ファイルに多数の文書をストリームします。これらはいずれも厳密な JSON ではないため、この検証ツールでは意図的に拒否されます。

よくある質問

JSON はどこかにアップロードされますか?

いいえ。整形ツールは完全にブラウザ内で動作します。ページが読み込まれた後はインターネットを切断しても動き続けます。

整形と圧縮の違いは何ですか?

整形(beautify)は改行とインデントを加えて、人が構造を読めるようにします。圧縮(minify)は不要な空白をすべて取り除き、機械向けにデータをできるだけ小さくします。どちらも意味的には同一の JSON になります。

JavaScript では動くのに無効な JSON と言われるのはなぜですか?

JavaScript のオブジェクトリテラルは JSON より緩やかです。シングルクォート、引用符のないキー、末尾のカンマ、コメントは JavaScript のコードでは問題ありませんが、JSON 標準(RFC 8259)では禁止されています。

サイズの上限はありますか?

決まった上限はありません。数メガバイトの文書でも現行の端末なら瞬時に整形できます。非常に大きなファイルはブラウザのメモリだけが制限になります。

キーを並べ替えるとデータの意味が変わりますか?

いいえ。JSON のオブジェクトは仕様上順序を持たないため、キーを並べ替えても同等の文書になります。配列は順序を持つので、その順序は常に保たれます。