zaLinux.ru

Как отформатировать JSON в командной строке чтобы он стал удобным для чтения


Мы уже рассмотрели вопрос, как отформатировать 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

Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *