このツールの動作
字下げを整えます。各値を構成する文字は、あなたが打ったとおりに残ります。
{"id":12345678901234567890,"ratio":1.0,"huge":1e400}
{
"id": 12345678901234567890,
"ratio": 1.0,
"huge": 1e400
}
素直な実装は数値を書き換えてしまう
同じ入力を素直な実装——JSON.parse してから JSON.stringify——に通すと、三つの値がすべて変わります。
| 書いた形 | 解析と印字を一往復した後 |
|---|---|
12345678901234567890 | 12345678901234567000 |
1.0 | 1 |
1e400 | null |
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だけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。