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

JSONのキーを並べ替え|差分がそのまま読める形に整えて出力

JSONのキーを、どの階層でもアルファベット順に並べ替えます。同じ順で並べた二つのファイルは、キーの順ではなく、本当に変わった箇所だけが差分として残るようになります。

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

JSON 入力

JSON 出力

このツールの動作

すべての階層で、各オブジェクトのキーを辞書順に並べます。

{ "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だけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

なぜ配列は並べ替えられないのですか。
配列の順序はその意味の一部だからです。`["read", "write"]` と `["write", "read"]` は、あなたには同じ集合でも、そのファイルを読む相手には別の値かもしれません。パイプラインの手順、優先順位、マイグレーションの並びなどです。JSON のデータモデルでは、オブジェクトのキーは順序を持ちませんが、配列の要素は持ちます。
なぜ Z が a より前で、a が é より前なのですか。
並べ替えは Unicode のコードポイント順であり、特定の言語の規則ではないからです。どの機械でも同じファイルになる唯一の順序です。ロケールに従う照合はストックホルムとパリでキーの順を変えてしまいます。ファイルを比べるための並べ替えは、何よりまず再現可能でなければなりません。
並べ替えれば、ハッシュを取れる正規形になりますか。
なりません。そしてこの違いは重要です。キーの並べ替えは正規化の一部にすぎず、RFC 8785(JSON Canonicalization Scheme)は数値の書き方と文字列のエスケープ方法も定めます。このツールは意図的にそのどちらにも触れないので、`1.0` と `1` だけが違う二つの文書は、並べ替えても別の文字列のままです。ハッシュが要るなら JCS の実装をお使いください。

関連ツール