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をアルファベット順に整理して目視確認しやすくする
使い方
- 左側にJSONを貼り付けるか、サンプル読み込み、または .json ファイルをアップロードします
- キー名ソートか配列ソートを選び、昇順・降順と再帰オプションを設定します
- 「ソート」を実行して右側の結果を確認します
- 必要に応じて結果をコピーするか、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 を使う
pythonimport 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
- JSON 圧縮
- CSV to JSON
- JSON から CSV
- JSON Diff
- JSON Escape / Unescape
- JSONフラット化
- JSON フォーマッター
- JSON 生成
- JSONPath オンラインクエリ
- JSON マージ
- JSON 修復
- JSON Schema バリデーター
- JSONソート
- JSON Stringify
- JSONをHTMLに変換
- JSONからJavaへ
- JSON から Markdown
- JSON を SQL に変換
- JSON から TOML へ変換
- JSONをTypeScriptに変換
- XML を JSON に変換
- JSONをXMLへ変換
- YAML を JSON に変換
- JSON → YAML 変換
- JSON から Go へ
- JSON から Rust
- JSON から Swift
- JSON から C#
- JSON から C++
- JSON を PHP に
- JSON から Python