JSONソート

JSONオブジェクトのキー順や配列要素を整えて、読みやすく比較しやすい構造にそろえます。処理はすべてブラウザ内で完結します。

関連おすすめ

JSONソートとは何ですか?

JSONソートは、JSONオブジェクトのキー名を一定の順序で並べ替えたり、配列要素を値の順序で整列させたりする処理です。値そのものや型は変えず、見た目の順序だけをそろえます。

この操作は Git Diff のノイズ削減、設定ファイルの正規化、JSON Diff 前の前処理、APIレスポンスのキャッシュキー安定化に役立ちます。同じデータでもキー順が違うだけで差分が増える場面を減らせます。

GeekFormat の JSONソートツールは、キー名ソートと配列ソートの2モード、再帰オンオフ、昇順・降順の切り替えを備えています。すべてローカル処理なので、機密JSONも安心して扱えます。

ユースケース

  • Git管理中の package.json や tsconfig.json のキー順を統一して diff を見やすくする
  • 比較前に2つのJSONをソートして、順序違いだけの疑似差分を減らす
  • APIレスポンスのキー順を安定させてキャッシュやハッシュ計算を安定化する
  • 設定ファイルや Feature Flag の保存順をそろえてレビューしやすくする
  • 大きなJSONをアルファベット順に整理して目視確認しやすくする

使い方

  1. 左側にJSONを貼り付けるか、サンプル読み込み、または .json ファイルをアップロードします
  2. キー名ソートか配列ソートを選び、昇順・降順と再帰オプションを設定します
  3. 「ソート」を実行して右側の結果を確認します
  4. 必要に応じて結果をコピーするか、sorted.json としてダウンロードします

特徴

  • 2つのモード: オブジェクトキーの並べ替えと配列要素の並べ替えを切り替えられます
  • 再帰ソート: ネストしたオブジェクトの内部まで自動で順序をそろえます
  • 昇順・降順対応: A-Z と Z-A、または小さい順と大きい順をすぐ切り替えできます
  • 構造はそのまま保持: 値や型を変えず、順序だけを整えます
  • ローカル処理で安全: JSONはサーバーへ送られず、ブラウザ内だけで処理されます
  • 後続処理に接続しやすい: ソート後の結果をJSON Diff、Repair、Formatへそのまま渡せます

コード例

JavaScriptでオブジェクトキーを再帰ソートする

javascript
// キー名を再帰的にソートして新しいオブジェクトを返す
function sortKeysDeep(value) {
  if (Array.isArray(value)) return value.map(sortKeysDeep);
  if (value !== null && typeof value === 'object') {
    return Object.keys(value)
      .sort((a, b) => a.localeCompare(b))
      .reduce((acc, k) => {
        acc[k] = sortKeysDeep(value[k]);
        return acc;
      }, {});
  }
  return value;
}

const data = { zoo: { animals: ['zebra', 'elephant'] }, alpha: 1, beta: 2 };
console.log(JSON.stringify(sortKeysDeep(data), null, 2));

Pythonで sort_keys=True を使う

python
import json

data = {"zoo": {"animals": ["zebra", "elephant"]}, "alpha": 1, "beta": 2}

print(json.dumps(data, indent=2, sort_keys=True, ensure_ascii=False))

arr = [3, 1, 4, 1, 5]
print(sorted(arr))
print(sorted(arr, reverse=True))

jqでJSONキーや配列をソートする

bash
# キー名を再帰的にソート
jq -S '.' data.json

# 配列要素をソート
jq 'sort' data.json

# 特定フィールドでソート
jq 'sort_by(.age)' data.json

よくある質問

JSONソートとJSONフォーマットの違いは何ですか?

JSONフォーマットはインデントや改行を整えるだけですが、JSONソートはキー名や配列要素の順序を並べ替えます。両方を使うと、構造も見た目も整ったJSONになります。

ソートするとJSONのサイズは変わりますか?

基本的にはほとんど変わりません。キーの並び順だけが変わり、値の数や文字列の内容は維持されます。

値や型が変わることはありますか?

ありません。`null`、真偽値、数値、文字列、オブジェクト、配列の値そのものは一切変更されません。

再帰ソートとは何ですか?

外側のオブジェクトだけでなく、内側のネストされたオブジェクトにも同じ並べ替えを適用するモードです。設定JSONやAPIレスポンスの標準化では通常オンのままがおすすめです。

整数のようなキーが先頭に来るのはなぜですか?

JavaScriptでは `0`、`1`、`2` のような整数風キーが数値順で扱われるためです。これは仕様に基づく挙動で、本ツールでもその特性を保ちます。

配列内のオブジェクトはどう並べ替えられますか?

配列モードでは要素を文字列表現ベースで比較します。特定のフィールドで厳密に並べ替えたい場合は、コード例のように `sort_by` や `Array.sort()` を使う方法が向いています。

JSONはサーバーにアップロードされますか?

アップロードされません。解析、ソート、整形はすべてブラウザ内で完結するため、機密データでも扱いやすくなっています。

JSON Diff や Schema 検証と一緒に使うなら順番は?

一般的には JSON Repair → JSONソート → JSON Diff / JSON Format → Schema検証 の順が使いやすいです。先に順序をそろえることで差分比較のノイズを減らせます。

トラブルシューティング

Invalid JSON エラーが表示される

入力JSONに構文エラーがある可能性があります。先に JSON Repair や JSON Format ツールで構文を確認してください。

整数風キーが先頭に来る

JavaScript仕様で整数風キーは数値順に扱われます。文字列として扱いたい場合は、キーを明示的な文字列として設計してください。

配列内オブジェクトが期待どおりの順序にならない

配列モードは汎用比較で並べ替えるため、特定フィールド順ではありません。必要なら `sort_by(.field)` や独自比較関数を使ってください。

内側のオブジェクトが並べ替えられない

再帰オプションがオフになっている可能性があります。再帰をオンにして再実行してください。

大きなJSONで処理が重い

巨大なJSONはブラウザメモリを多く使います。大きなファイルは `jq` や Python スクリプトで前処理してから確認すると安定します。

用語集

JSON Sort
JSONのキー名や配列要素の物理順序だけを並べ替える処理です。値や型は変更しません。
Recursive Sort
ネストしたオブジェクトの各階層まで再帰的にキー名を並べ替えることです。
Ascending / Descending
昇順は A-Z や小さい値から大きい値、降順はその逆の並びです。
Canonical Form
比較やキャッシュに使いやすい、正規化された一貫したJSON表現です。
Git Diff Noise
実際の内容変更ではなく、順序や書式の違いだけで発生する差分ノイズです。
localeCompare
JavaScriptの文字列比較APIで、本ツールではキー名の辞書順比較に相当します。

JSONソートの代表的な利用シーン

シーン並べ替え基準おすすめ方法使うツール
Git Diff ノイズ削減オブジェクトのキー名キー名を再帰ソート本ツール / jq -S
設定ファイルの正規化オブジェクトのキー名昇順 + 再帰本ツール
APIキャッシュキー安定化オブジェクトのキー名ソート後に stringify本ツール / コード例
配列データの簡易整理配列要素配列モード本ツール

JSONソート関連ツールの使い分け

ツール役割並べ替え対象よく一緒に使う処理
JSONソート順序の統一キー名 / 配列要素JSON Diff、フォーマット
JSON Diff差分比較なし事前にソート
JSON Merge複数JSONの統合必要に応じて後でソートマージ後ソート
JSON Repair不正JSONの修復なし修復後ソート

Authoritative References