PasteDiff

Два JSON редко совпадают байт в байт: другой порядок ключей, другие отступы. Кнопка «Format JSON» приводит оба к одному виду — пример ниже уже отформатирован, и видны только настоящие изменения значений.

Paste text above and hit Compare (or just type — it updates live).

Одинаковые данные — разные байты

Ответ API и сохранённый эталон, конфиг на двух серверах, выгрузка до и после миграции: содержимое то же, а построчный диф красен целиком — потому что различаются отступы, переносы и порядок ключей, которым JSON-объект ничего не обещает. Кнопка { } Format JSON разбирает обе стороны и печатает их одинаково: отступ в два пробела, а с галочкой Sort keys — и ключи по алфавиту. После этого диф показывает только то, что изменилось по смыслу. В примере это два значения: items 3 → 4 и active true → false; переставленные ключи и другие отступы исчезли из сравнения.

Ошибки разбора — с позицией

Если одна из сторон — не совсем JSON (лишняя запятая, одинарные кавычки, комментарий), кнопка честно скажет, какая сторона не разобралась и на какой позиции. Это, кстати, быстрый способ проверить JSON на валидность. Разбор происходит в браузере — токены и ключи из ваших конфигов никуда не отправляются.

Одна оговорка про большие числа

JavaScript хранит числа как double: целые больше 253 (длинные числовые ID) при переформатировании могут потерять точность. Если ваши данные такие — сравнивайте без переформатирования или заключите ID в кавычки.

Смежные задачи

Кириллица в JSON — обычные строки, сравнение с ней работает как с любым текстом. Если после копирования из чата или статьи JSON «не разбирается», хотя выглядит правильно, — в нём «ёлочки» вместо прямых кавычек или невидимый символ; TextWash покажет, где. См. также: сравнить два файла, две версии документа.