Сравнение JSON
Вставьте две версии JSON — например, ответы API до и после изменения или две версии конфигурации — и посмотрите, что добавилось, удалилось и изменилось. Каждое различие показано с путём к значению, поэтому его легко найти даже в большом документе.
Как пользоваться
Вставьте исходный JSON в поле «Было», изменённый — в поле «Стало» или откройте файлы кнопками в шапках полей. Результат обновляется сам во время ввода. Кнопка с двумя стрелками меняет стороны местами, кнопка примера подставляет образец. При синтаксической ошибке появится сообщение с номером строки, а место ошибки подчёркивается в соответствующем поле.
Код обрабатывается в браузере, не отправляется на сервер и не сохраняется после закрытия страницы. Размер каждой стороны — до 2 МБ в UTF-8. Отчёт о различиях можно скопировать или скачать текстовым файлом. Большой отчёт на странице сокращается, но копирование и скачивание сохраняют все различия и значения целиком.
Длительную обработку можно остановить кнопкой «Отменить обработку». Изменение ввода прерывает предыдущий расчёт; для повторного запуска измените данные или нажмите кнопку примера. Если документ слишком сложен, появится сообщение с предложением разделить его на части.
Для вашего удобства рекомендую использовать полноэкранный режим.
Было
{
"name": "basicweb",
"version": 1,
"id": 9007199254740993,
"tags": ["html", "css"],
"author": { "city": "Москва" }
}Стало
{
"version": 2,
"name": "basicweb",
"id": 9007199254740992,
"tags": ["html", "css", "js"],
"author": { "city": "Казань", "site": "basicweb.ru" }
}Различия
Для сравнения включите JavaScript. Пример: в {"a": 1, "b": 2} и {"b": 3, "a": 1} различается только b — порядок ключей не важен.
Как читать результат
Каждая строка отчёта начинается со знака, поэтому вид изменения понятен и без цвета: + — значение добавлено, − — удалено, ~ — изменено, после стрелки указано новое значение. Путь записан как в JavaScript: author.city — свойство city объекта author, tags[2] — третий элемент массива tags. Ключи с пробелами и точками записываются в кавычках: ["first name"].
~ version: 1 → 2
~ id: 9007199254740993 → 9007199254740992
+ tags[2]: "js"
~ author.city: "Москва" → "Казань"
+ author.site: "basicweb.ru"Что считается различием
Порядок ключей в объекте не важен: {"a": 1, "b": 2} и {"b": 2, "a": 1} совпадают. Порядок элементов массива важен, поэтому массивы сравниваются по позициям: вставка элемента в начало сдвигает все следующие. Пробелы, переносы и отступы на результат не влияют — сравнивается содержание, а не запись.
Числа сравниваются по значению без потери точности: 1.0 и 1 равны, а 9007199254740993 и 9007199254740992 различаются, хотя обычный JSON.parse() в JavaScript округлил бы их до одного числа. Если ключ в объекте повторяется, учитывается последнее значение — так же поступает JSON.parse(). Смена типа, например строки "1" на число 1, считается изменением.
Вопросы и ответы
Безопасно ли сравнивать рабочие данные?
Да. Сравнение выполняется в вашем браузере, данные не отправляются на сервер и не сохраняются после закрытия вкладки.
Почему переставленные ключи не считаются различием?
В JSON объект — это набор пар «ключ — значение» без порядка, и большинство программ читают его одинаково при любой последовательности ключей. Поэтому отчёт показывает только изменения содержания.
Можно ли сравнить JSON с ошибкой?
Нет: сначала нужно исправить синтаксис. Сообщение укажет сторону, строку и столбец, а место ошибки будет подчёркнуто. Привести JSON к читаемому виду поможет JSON форматтер.
Изучить JSON
Синтаксис и работа с JSON в JavaScript описаны в статьях об объекте JSON, методах JSON.parse() и JSON.stringify().