Сортировка JSON

Упорядочивайте ключи объектов JSON и элементы массивов, чтобы данные было проще читать, сравнивать и сохранять в стабильном виде. Всё работает локально в браузере.

Похожие

Что такое сортировка JSON?

Сортировка JSON — это перестановка ключей объектов по правилу порядка или упорядочивание элементов массива по значению. Значения и типы данных при этом не меняются, меняется только физический порядок отображения.

Такую нормализацию используют, чтобы уменьшить шум в Git Diff, стандартизировать конфигурации, подготовить данные к JSON Diff и сделать стабильными ключи кеша API. Один и тот же JSON в разном порядке перестаёт выглядеть как лишнее изменение.

Инструмент GeekFormat поддерживает два режима: сортировку ключей и сортировку массивов, а также переключение между возрастанием и убыванием и рекурсивную обработку вложенных структур. Данные не отправляются на сервер.

Варианты использования

  • Унифицировать порядок ключей в package.json, tsconfig.json и других конфигурациях
  • Отсортировать оба JSON перед сравнением и убрать ложные различия из-за разного порядка ключей
  • Стабилизировать порядок ключей в ответах API для кеша, hash и snapshot-тестов
  • Привести в порядок большие JSON-файлы перед code review или аудитом конфигов
  • Подготовить результат после merge или repair перед дальнейшей валидацией

Как использовать

  1. Вставьте JSON слева, загрузите пример или импортируйте файл .json
  2. Выберите режим сортировки ключей или массива, затем задайте порядок и рекурсию
  3. Нажмите кнопку сортировки и проверьте результат справа
  4. Скопируйте итог или скачайте его как файл sorted.json

Функции

  • Два режима: сортировка ключей объектов и сортировка элементов массива
  • Рекурсивная обработка: порядок выравнивается не только снаружи, но и внутри вложенных объектов
  • Возрастание и убывание: можно быстро переключаться между двумя направлениями сортировки
  • Структура сохраняется: значения и типы не меняются, меняется только порядок
  • Локальная безопасность: 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));

Использование sort_keys=True в Python

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))

Сортировка JSON через jq

bash
# Рекурсивно отсортировать ключи
jq -S '.' data.json

# Отсортировать элементы массива
jq 'sort' data.json

# Сортировать по конкретному полю
jq 'sort_by(.age)' data.json

Часто задаваемые вопросы

Чем сортировка JSON отличается от форматирования JSON?

Форматирование меняет только отступы и переносы строк, а сортировка JSON переставляет ключи и элементы массива. Обычно их используют вместе, чтобы получить и единый порядок, и читаемый вид.

После сортировки JSON станет больше?

Почти нет. Количество данных не меняется, меняется только порядок расположения ключей и элементов.

Изменяются ли значения или типы?

Нет. `null`, числа, строки, булевы значения, объекты и массивы сохраняются как есть.

Что значит рекурсивная сортировка?

Это сортировка не только верхнего объекта, но и всех вложенных объектов внутри него. Для конфигов и ответов API обычно лучше держать её включённой.

Почему числовые ключи оказываются первыми?

В JavaScript ключи вида `0`, `1`, `2` обрабатываются как целочисленные и идут в числовом порядке. Это поведение спецификации, а не ошибка инструмента.

Как сортируются объекты внутри массива?

В режиме массива сравнение идёт по строковому представлению элемента. Если нужен порядок по конкретному полю, лучше использовать `sort_by(.field)` или собственную функцию сравнения.

JSON отправляется на сервер?

Нет. Все действия выполняются локально в браузере, поэтому инструмент подходит и для чувствительных данных.

В каком порядке использовать вместе с JSON Diff или Schema?

Обычно удобно так: JSON Repair → сортировка JSON → JSON Diff / форматирование → Schema-проверка. Сначала выравнивается порядок, потом уменьшается шум при сравнении.

Устранение неполадок

Появляется ошибка Invalid JSON

Скорее всего, во входных данных есть синтаксическая ошибка. Сначала проверьте JSON через Repair или Format.

Числовые ключи всегда сверху

Так работает JavaScript для ключей, похожих на целые числа. Это поведение платформы, а не ошибка сортировки.

Объекты внутри массива сортируются не так, как ожидалось

Режим массива не знает о бизнес-полях и сравнивает элементы обобщённо. Для поля вроде `price` или `date` лучше использовать `sort_by`.

Вложенные объекты не сортируются

Проверьте, включена ли рекурсивная сортировка. Без неё сортируется только верхний уровень.

Очень большой JSON тормозит браузер

Крупные файлы лучше предварительно обработать локально через `jq`, Python или Node.js, а в браузере использовать уже для проверки результата.

Глоссарий

JSON Sort
Операция, которая меняет только порядок ключей или элементов массива, но не трогает значения и типы.
Recursive Sort
Сортировка, которая применяется не только к верхнему уровню, но и ко всем вложенным объектам.
Ascending / Descending
Порядок по возрастанию означает A-Z или от меньшего к большему, по убыванию — наоборот.
Canonical Form
Нормализованное представление JSON, удобное для сравнения, кеширования и вычисления хеша.
Git Diff Noise
Лишние строки diff, появившиеся из-за порядка или форматирования, а не из-за реального изменения данных.
localeCompare
API сравнения строк в JavaScript, которое часто используют для сортировки ключей по словарному порядку.

Где чаще всего нужна сортировка JSON

СценарийЧто сортироватьРекомендуемый подходИнструмент
Снизить шум Git DiffКлючи объектаРекурсивная сортировка ключейЭтот инструмент / jq -S
Нормализовать конфигиКлючи объектаВозрастание + рекурсияЭтот инструмент
Стабилизировать ключ кеша APIКлючи объектаСначала сортировка, потом stringifyЭтот инструмент / код
Быстро упорядочить массивЭлементы массиваРежим массиваЭтот инструмент

Когда брать сортировку, diff или merge

ИнструментЗадачаЧто упорядочиваетЧто идёт дальше
Сортировка JSONУнификация порядкаКлючи / массивыDiff, форматирование
JSON DiffСравнение измененийНетЛучше после сортировки
JSON MergeОбъединение источниковОпционально после mergeСортировка после merge
JSON RepairИсправление невалидного JSONНетСортировка после исправления

Authoritative References