このツールの動作
すべての階層で、各オブジェクトのキーを辞書順に並べます。
{ "server": { "port": 8080, "host": "localhost" }, "debug": true }
{
"debug": true,
"server": {
"host": "localhost",
"port": 8080
}
}
配列は順序を保つ
JSON のオブジェクトは名前と値の組からなる順序のない集合です。仕様がそう述べており、書いた順序を保つと約束する解析器もありません。配列は並びであり、その順序は値です。
["migrate", "seed", "start"]
これを並べ替えれば、手順書が単語帳になります。だから配列はどの階層でもそのまま残します。
順序はコードポイント順
Z は a より前に、a は é より前に来ます。Unicode のコードポイント順であって、特定の言語の辞書順ではありません。
どの機械でも同じ出力になる唯一の選択です。ロケールに従う並べ替えは、ドイツ語では ä を a の隣に、スウェーデン語では z の後ろに置きます。同じファイルが、誰が実行したかによって違う形で戻ってくることになり、並べ替えの主な用途——食い違った二つのファイルを比べること——が台無しになります。
並べ替えは正規化ではない
並べ替えた文書は比べやすくなります。しかしハッシュを取れる正規形ではありません。
RFC 8785、JSON Canonicalization Scheme は、数値の書き方と文字列のエスケープ方法も定めます。このツールはそのどちらにも意図的に触れません。1.0 は 1.0 のまま、\u00e9 は \u00e9 のままです。まったく同じことを意味する二つの文書が、並べ替えても別の文字列になり得ます。
JSON の値の安定した指紋が必要なら、JCS の実装をお使いください。二つの設定ファイルで何が変わったかを見たいのなら、両方を並べ替えてから比べてください。
プライバシー
すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。