Как я могу полностью отсортировать произвольный JSON с помощью jq?
==================================================================

Я хочу различить два текстовых файла JSON. К сожалению, они построены в произвольном порядке, поэтому я получаю различия, когда они семантически идентичны. Я хотел бы использовать jq (или любой другой), чтобы отсортировать их в любом полном порядке, чтобы устранить различия только из-за упорядочения элементов.

--sort-keys решает половину проблемы, но не сортирует массивы.

Я совершенно не знаю jq и не знаю, как написать рекурсивный фильтр jq, который сохраняет все данные; любая помощь будет оценена.

Я понимаю, что построчный вывод diff не обязательно является лучшим способом для сравнения двух сложных объектов, но в этом случае я знаю, что два файла очень похожи (почти идентичны), и построчные различия в порядке для моих целей.

[Использование jq или альтернативных инструментов командной строки для сравнения файлов JSON](https://stackoverflow.com/questions/31930041) отвечает на очень похожий вопрос, но не печатает различия. Кроме того, я хочу сохранить отсортированные результаты, так что мне действительно нужна программа-фильтр для сортировки JSON.

sorted\_walk / 1 (так названо по причине, описанной в постскриптуме ниже).

normalize.jq:

Пример использования bash:

POSTSCRIPT: встроенное определение`walk/1` был изменен после того, как этот ответ был впервые опубликован: теперь он использует`keys_unsorted` скорее, чем`keys`.



использование[`jd`](https://github.com/josephburnett/jd#command-line-usage) с`-set` опция:

Отсутствие выхода означает отсутствие разницы.

Различия отображаются в виде @ пути и + или -.

Выходные различия также могут быть использованы в качестве файлов патчей с`-p` вариант.

<https://github.com/josephburnett/jd#command-line-usage>