Spesifikasi JSON secara formal tidak mendefinisikan urutan kunci dalam sebuah objek — {"a": 1, "b": 2} dan {"b": 2, "a": 1} merepresentasikan data yang sama. Namun dalam praktiknya, urutan kunci tetap sering penting, baik bagi manusia maupun alat yang bekerja dengan data tersebut.
Mengapa mengurutkan kunci
- Perbandingan (diff). Jika dua dokumen JSON dengan data identik memiliki urutan kunci berbeda, diff teks akan menunjukkan perbedaan palsu. Pengurutan menghilangkan masalah ini.
- Output deterministik. Jika objek yang sama di-serialize berkali-kali (misalnya untuk menghasilkan hash atau kunci cache), kunci yang terurut menjamin hasil yang sama setiap kali.
- Keterbacaan. Objek yang diurutkan berdasarkan abjad lebih mudah dipindai dengan cepat dan menemukan field tertentu, terutama pada struktur besar.
Pengurutan rekursif
Agar hasilnya bisa diprediksi, pengurutan biasanya diterapkan secara rekursif — tidak hanya pada kunci level atas, tetapi juga pada kunci semua objek bersarang di kedalaman berapa pun. Urutan elemen dalam array tidak berubah, karena untuk array, urutan elemen adalah bagian bermakna dari data.
Kapan ini tidak dibutuhkan
Jika JSON hanya dikonsumsi oleh program (bukan manusia atau alat diff), mengurutkan kunci biasanya tidak memberikan keuntungan praktis apa pun — parser membaca objek dengan cara yang sama terlepas dari urutan field.
Kasus paling sederhana: abjad Latin tanpa diakritik
Bahasa Indonesia menggunakan alfabet Latin standar tanpa huruf beraksen (tidak ada é, ñ, atau ü seperti pada banyak bahasa Eropa lain), sehingga pengurutan kode-poin Unicode yang naif untuk kunci seperti "apel", "jeruk", "nanas" hampir selalu menghasilkan urutan yang sama persis dengan urutan abjad yang diharapkan. Ini menjadikan sort key JSON salah satu kasus paling mudah untuk dikonfigurasi dengan benar — perhatian justru lebih perlu diarahkan ke urutan kunci yang deterministik untuk build API e-commerce, bukan ke masalah collation yang rumit seperti pada bahasa dengan banyak huruf beraksen.
Pengurutan dan locale
Pengurutan alfabetis kunci yang berisi lebih dari sekadar huruf Latin bergantung pada apakah karakter dibandingkan per-byte (Unicode code point) atau dengan mempertimbangkan aturan bahasa (locale-aware collation). Misalnya, perbandingan berdasarkan code point menempatkan huruf besar sebelum huruf kecil terlepas dari alfabetnya, sementara pengurutan yang mempertimbangkan locale bisa menghasilkan urutan kunci yang berbeda — ini perlu diperhatikan jika hasilnya dibandingkan antar bahasa atau sistem yang berbeda.