100% ローカル — データがブラウザの外に出ることはありません

JSONフォーマッタ|圧縮されたデータもそのまま読める形に整える

JSONを字下げします。数値は書かれたままなので、20桁のIDも桁が欠けず、1.0 も 1.0 のままです。受け取った応答そのものを、写しではなく直接読めます。

高速 プライベート Cookieゼロ
インデント

JSON 入力

JSON 出力

このツールの動作

字下げを整えます。各値を構成する文字は、あなたが打ったとおりに残ります。

{"id":12345678901234567890,"ratio":1.0,"huge":1e400}
{
  "id": 12345678901234567890,
  "ratio": 1.0,
  "huge": 1e400
}

素直な実装は数値を書き換えてしまう

同じ入力を素直な実装——JSON.parse してから JSON.stringify——に通すと、三つの値がすべて変わります。

書いた形解析と印字を一往復した後
1234567890123456789012345678901234567000
1.01
1e400null

JavaScript の数値は倍精度浮動小数点です。保持できるのはおよそ十五桁で、小数点を書いたことは覚えておらず、およそ 1.8 × 10³⁰⁸ を超えると無限大になります。JSON は無限大を表現できないので、null として印字されます。

これは丸めの小話ではありません。12345678901234567890 は Twitter のスノーフレーク、PostgreSQL の bigint、決済の参照番号の形です。それを書き換える整形ツールは、もう同じ行を指さないファイルを返してきます。

このツールは各数値をそれが実際にそうであるところの文字列として読み、その文字列を書き戻します。

重複キーは拒否する。仲裁はしない

{ "port": 8080, "host": "example.com", "port": 3000 }

RFC 8259 はオブジェクトの名前が一意であるべきだと言い——SHOULD であって MUST ではありません——そうでない場合については何も言いません。実際、解析器の振る舞いは割れています。大半は最後を採り、最初を採るものもあり、文書ごと拒否するものもあります。

代わりに選べば、意味の違うファイルができあがり、それを告げるものはありません。ツールは止まり、二つ目のキーの位置を示します。

厳密な JSON のみ

コメントも、末尾のコンマも、単引用符の文字列もありません。それらは JSON5 と JSONC であり、.json という名前のファイルに住む別の言語です。

受け入れれば、世界の解析器の半分が拒否する出力を作ることになります。整形ツールの目的とは正反対です。エラーメッセージは、壊れた位置の文字を指し示します。

二つの設定

字下げ — 既定は空白二つ。ゼロにすると最小化された形になります。

キーの並べ替え — 再帰的に辞書順へ。配列の順序はそのままです。二つのファイルを比べる前に便利です。キーの順序に意味があるときは切っておいてください。

プライバシー

すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

なぜ他の整形ツールは数値を変えてしまうのですか。
JavaScript の値へ解析してから印字し直すからです。JavaScript の数値は倍精度浮動小数点です。`12345678901234567890` は `12345678901234567000` に、`1.0` は `1` に、そして最大の double を超える `1e400` は `null` になります。このツールは各数値の字面を保ちます。整形が変えるのは配置だけです。
なぜ重複キーは誤りなのですか。
正解が存在しないからです。RFC 8259 はオブジェクトの名前は一意である*べき*だと述べ、一意でない場合の動作は定めていません。最初を採る実装、最後を採る実装が大半、拒否する実装もあります。黙ってどれかを選べば、貼り付けた文書とは別の意味の文書ができあがります。二つ目のキーの位置はメッセージに含まれます。
コメントや末尾のコンマが入った JSON も読めますか。
読めません。それは JSON5 や JSONC であり、ファイル名が同じだけの別の言語です。ここで受け入れれば、世界の解析器の半分が拒否する出力を作ることになります。エラーは問題の文字の位置を示します。

関連ツール