Сортировка JSON
Упорядочивайте ключи объектов JSON и элементы массивов, чтобы данные было проще читать, сравнивать и сохранять в стабильном виде. Всё работает локально в браузере.
Похожие
Что такое сортировка JSON?
Сортировка JSON — это перестановка ключей объектов по правилу порядка или упорядочивание элементов массива по значению. Значения и типы данных при этом не меняются, меняется только физический порядок отображения.
Такую нормализацию используют, чтобы уменьшить шум в Git Diff, стандартизировать конфигурации, подготовить данные к JSON Diff и сделать стабильными ключи кеша API. Один и тот же JSON в разном порядке перестаёт выглядеть как лишнее изменение.
Инструмент GeekFormat поддерживает два режима: сортировку ключей и сортировку массивов, а также переключение между возрастанием и убыванием и рекурсивную обработку вложенных структур. Данные не отправляются на сервер.
Варианты использования
- Унифицировать порядок ключей в package.json, tsconfig.json и других конфигурациях
- Отсортировать оба JSON перед сравнением и убрать ложные различия из-за разного порядка ключей
- Стабилизировать порядок ключей в ответах API для кеша, hash и snapshot-тестов
- Привести в порядок большие JSON-файлы перед code review или аудитом конфигов
- Подготовить результат после merge или repair перед дальнейшей валидацией
Как использовать
- Вставьте JSON слева, загрузите пример или импортируйте файл .json
- Выберите режим сортировки ключей или массива, затем задайте порядок и рекурсию
- Нажмите кнопку сортировки и проверьте результат справа
- Скопируйте итог или скачайте его как файл 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
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))Сортировка 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
- JSON Compress
- CSV в 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