Специфікація JSON формально не визначає порядок ключів в об’єкті — {"a": 1, "b": 2} і {"b": 2, "a": 1} є однаковими даними. Але на практиці порядок ключів все одно часто має значення для людей і інструментів, які працюють із цими даними.
Навіщо сортувати ключі
- Порівняння (diff). Якщо два JSON-документи з однаковими даними мають різний порядок ключів, текстовий diff покаже хибну різницю. Сортування усуває цю проблему.
- Детермінований вивід. Якщо один і той самий об’єкт серіалізується кілька разів (наприклад, для генерації хешу чи кеш-ключа), відсортовані ключі гарантують однаковий результат щоразу.
- Читабельність. Відсортований за алфавітом об’єкт легше швидко переглянути й знайти потрібне поле, особливо у великих структурах.
Рекурсивне сортування
Щоб результат був передбачуваним, сортування зазвичай застосовують рекурсивно — не лише до ключів верхнього рівня, а й до ключів усіх вкладених об’єктів на будь-якій глибині. Порядок елементів у масивах при цьому не змінюється, оскільки для масивів порядок елементів є значущою частиною даних.
Коли це не потрібно
Якщо JSON споживає лише програма (а не людина чи diff-інструмент), сортування ключів зазвичай не дає жодної практичної переваги — парсери читають об’єкт однаково незалежно від порядку полів.
Сортування і локаль
Алфавітне сортування ключів, що містять не лише латиницю, залежить від того, порівнюються символи побайтово (Unicode code point) чи з урахуванням мовних правил (locale-aware collation). Наприклад, побайтове порівняння ставить великі літери перед малими незалежно від алфавіту, тоді як сортування з урахуванням локалі може впорядкувати ключі інакше — це варто враховувати, якщо результат порівнюють між різними мовами чи системами.