тгТихая грань
ОПЕРАЦИЯ · СРАВНЕНИЕ

Сравнить JSON после нормализации

Игнорировать оформление и порядок ключей, сохранив порядок массивов.

Инструмент: Python 3 · риск: read-only · проверено: 2026-02-21

Предварительные условия

Python 3; old.json и new.json с уникальными ключами, без NaN и Infinity.
Команда
python3 - <<'PY'
import json, difflib
from pathlib import Path
def normalized(name):
    return json.dumps(json.loads(Path(name).read_text(encoding="utf-8")), ensure_ascii=False, sort_keys=True, indent=2).splitlines(True)
print("".join(difflib.unified_diff(normalized("old.json"), normalized("new.json"), fromfile="old", tofile="new")), end="")
PY

Объяснение аргументов

sort_keys сортирует только ключи; splitlines(True) сохраняет окончания строк для diff.

Ожидаемый результат

Текстовый diff нормализованных представлений. Это не RFC 8785 и не универсальная семантическая эквивалентность.

Проверка

Отдельно проверьте различие null, отсутствующего поля и типов чисел.

Распространённые ошибки

  • Парсер теряет повторные ключи; float может потерять точность; порядок массивов нельзя бездумно сортировать.

Обратимость

Оригиналы не меняются.

Применимые форматы

json json-schema