ОПЕРАЦИЯ · СРАВНЕНИЕ
Сравнить JSON после нормализации
Игнорировать оформление и порядок ключей, сохранив порядок массивов.
Предварительные условия
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 может потерять точность; порядок массивов нельзя бездумно сортировать.
Обратимость
Оригиналы не меняются.