Мы уже рассмотрели вопрос, как отформатировать XML в командной строке чтобы он стал удобным для чтения, а есть ли способ в командной строке Linux отформатировать JSON в удобочитаемый вид?
По сути, нам нужно, что следующее:
{ "foo": "lorem", "bar": "ipsum" }
стало выглядить примерно так:
{ "foo": "lorem", "bar": "ipsum" }
Способы есть, причём их несколько.
Программа jq
Она очень проста в использовании и отлично работает! Она может обрабатывать очень большие структуры JSON, включая потоки. Вы можете найти уроки по работе с этой программой здесь (на английском языке).
Примеры использования:
echo '{"foo": "lorem", "bar": "ipsum"}' | jq { "foo": "lorem", "bar": "ipsum" }
Ещё примеры:
jq --color-output file1.json file1.json | less -R КОМАНДА_С_ВЫВОДОМ_JSON | jq .
«Интерактивный» stdin режим, просто введите JSON:
jq <<< '{ "foo": "lorem", "bar": "ipsum" }' { "bar": "ipsum", "foo": "lorem" }
Или используйте jq с фильтром идентификации:
jq '.foo' <<< '{ "foo": "lorem", "bar": "ipsum" }' "lorem"
Также есть опция --sort-keys, которая полезна в некоторых случаях.
Пример работы с cURL:
curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq '.'
С помощью Python
С Python вы можете сделать так:
echo '{"foo": "lorem", "bar": "ipsum"}' | python -m json.tool
или если JSON в файле, вы можете сделать:
python -m json.tool my_json.json
Если JSON с Интернет ресурса, такого как API, вы можете использовать
curl http://my_url/ | python -m json.tool
Для удобства во всех этих случаях вы можете сделать псевдоним:
alias prettyjson='python -m json.tool'
Для ещё большего удобства:
prettyjson_s() { echo "$1" | python -m json.tool } prettyjson_f() { python -m json.tool "$1" } prettyjson_w() { curl "$1" | python -m json.tool }
для всех вышеперечисленных случаев. Вы можете поместить его в .bashrc, и он всегда будет доступен в оболочке. Вызовите его как
prettyjson_s '{"foo": "lorem", "bar": "ipsum"}'
Python 3.5+ объект JSON больше не сортируется по умолчанию. Для сортировки добавьте в конец флаг --sort-keys. Т.е.
... | python -m json.tool --save-keys