JSONフォーマッター
無料のオンラインJSONバリデーター・整形(プリティプリント)・圧縮(ミニファイ)ツール。
1,444回閲覧
仕組み
JSON(JavaScript Object Notation)は単なる「JavaScriptっぽいデータ」ではなく、RFC 8259で定義された、それ自体で完結する厳格な形式です。構文はJavaScriptのオブジェクトリテラルに似ていますが、規則ははるかに厳しく定められています。すべてのキーと文字列値は二重引用符("key")で囲む必要があり、単一引用符は決して使用できません。オブジェクトや配列の最後の要素の後にカンマを付ける、いわゆる末尾のカンマ(trailing comma)は構文エラーになります。また、undefined、関数、コメント、NaNといったJavaScript固有の概念にはJSON上の対応が一切ありません。このツールは、入力されたデータをブラウザ標準のJSON.parse()エンジンにそのまま通すため、ここで表示されるエラーは、実際のAPIクライアントや設定ファイルの読み込み処理でも同じように発生するエラーです。
たとえば{'id': 12, 'active': true,}は2つの理由で検証に失敗します。idを囲む単一引用符が無効であることと、trueの後の末尾のカンマが無効であることです。正しい形式は{"id": 12, "active": true}です。JSONの構文解析に成功すると、整形(Beautify)は入れ子になったすべての階層にインデントを付け直します。配列の中のオブジェクト、そのまた中の配列といった構造を目で追えるようになり、6階層下で欠けている括弧を探すときなどに威力を発揮します。圧縮(Minify)はその逆で、意味を持たない空白文字をすべて取り除き、結果を1行にまとめます。保存容量や通信のためにペイロードを小さくしたいときに使います。どちらのモードでもデータの中身はまったく変わらず、変わるのは人間が読むための見た目だけです。
この種のツールは日々の開発作業の中で本領を発揮します。コードを書く前に生のAPIレスポンスの実際の構造を確認するために貼り付けたり、デプロイが失敗する前に.envに近い設定ファイルの紛れ込んだカンマをチェックしたり、ブラウザのDevToolsのネットワークタブからコピーした——多くの場合1行に押し込められて読めない——ペイロードを、目で追える形に変換したりする場面などです。
知っておくべきこと
- すべての処理はローカルで完結します。 テキストはサーバーには一切アップロードされず、検証・整形・圧縮はすべてブラウザ自身のJavaScriptエンジン内で行われます。
- 大きな整数は精度が失われることがあります。 JSONの数値はIEEE 754倍精度浮動小数点数の仕様に従うため、2^53を超える64ビットのIDは、文字列として保持せずにネイティブの数値として解析すると、気づかないうちに丸められてしまうことがあります。
- キーの順序は仕様上保証されていません。 実際には多くのパーサーが挿入順を保持しますが、それに依存するロジックを書かないようにしてください。
- ルート(最上位)の値がオブジェクトである必要はありません。 現行のJSON(RFC 8259準拠)では、ルートに裸の文字列、数値、真偽値、
null、配列を置くことも許されています。"hello"や42だけでも、それ単体で完全に有効なJSON文書です。
よくある質問
JSONが有効かどうかはどうやって確認しますか?
JSONを入力欄に貼り付けて「整形」を押してください。データが有効であれば「有効なJSON」という確認メッセージが表示されます。無効な場合は、JSON.parse()が報告するのと同じ形式で、問題の種類と位置(行/列)を示すエラーメッセージが表示されるため、文書全体を目で追う代わりに問題の文字へ直接ジャンプできます。
プリティプリントとミニファイの違いは何ですか?
プリティプリント(整形)はインデントと改行を加え、入れ子構造を人間が読みやすい形にします。データを実際に編集したりデバッグしたりしている最中に役立ちます。ミニファイ(圧縮)は不要な空白をすべて取り除いて1行にまとめます。保存容量が小さくなり、転送も速くなりますが、意味は元のデータとまったく同じです。どちらもデータそのものを変えるのではなく、何バイトと何個の改行でそれを表現するかを変えるだけです。
JavaScriptでは単一引用符や末尾のカンマが使えるのに、JSONではなぜ拒否されるのですか?
JSONはJavaScriptそのものではなく、RFC 8259で定義された別の、より厳格な仕様です。JavaScriptのオブジェクトリテラルは構文上の利便性として単一引用符、引用符なしのキー、末尾のカンマを許容しますが、そのいずれも有効なJSONではありません。どの言語・どのバックエンドであっても、実際のJSON.parse()呼び出しはこれらを拒否します。この厳格さは意図的なもので、数十もの言語がJSONを同一のルールで解析できるようにするためのものです。
機密性の高いJSONをここに貼り付けても安全ですか?
はい、安全です。整形処理はすべてJavaScriptによってブラウザ内で完結し、データはサーバーに送信されることも、どこかに保存されることもありません。検証・整形・圧縮のいずれの処理にもネットワーク通信は関与しません。ページを閉じればデータは完全に消去されるため、APIキーやトークン、個人情報を含むJSONであっても安心して使用できます。
自分のJSONは問題ないように見えるのに、それでも失敗します。なぜですか?
よくある目に見えにくい原因としては、最後のプロパティの後に残った末尾のカンマ、ワープロソフトから貼り付けた際に紛れ込むスマート(カーブ)クォートが直線の二重引用符の代わりに使われていること、文字列内でエスケープされていない二重引用符、プロパティ間のカンマの抜けなどが挙げられます。まずは報告された行/列の情報を確認してください。ほとんどの場合、実際の問題そのもの、あるいはその直前を指し示しています。
関連ツール
問題を報告
JSONフォーマッター
コメント
まだコメントはありません — 最初のコメントを書いてみましょう!