Как я могу красиво напечатать JSON в сценарии оболочки? - PullRequest
2751 голосов
/ 09 декабря 2008

Существует ли (Unix) сценарий оболочки для форматирования JSON в удобочитаемой форме?

По сути, я хочу преобразовать следующее:

{ "foo": "lorem", "bar": "ipsum" }

... примерно так:

{
    "foo": "lorem",
    "bar": "ipsum"
}

Ответы [ 54 ]

29 голосов
/ 04 октября 2016

Просто передайте вывод на jq ..

Пример:

twurl -H ads-api.twitter.com '.......' | jq .
24 голосов
/ 27 августа 2015

Pygmentize

Я комбинирую Python's json.tool с pygmentize:

echo '{"foo": "bar"}' | python -m json.tool | pygmentize -g

Есть несколько альтернатив пигментированию, перечисленных в мой ответ .

Вот живая демонстрация:

Demo

19 голосов
/ 03 февраля 2011

Я рекомендую использовать утилиту командной строки json_xs, которая включена в perl-модуль JSON :: XS. JSON :: XS - это модуль Perl для сериализации / десериализации JSON, на компьютере с Debian или Ubuntu вы можете установить его так:

sudo apt-get install libjson-xs-perl

Он также доступен для CPAN .

Чтобы использовать его для форматирования JSON, полученного из URL, вы можете использовать curl или wget следующим образом:

$ curl -s http://page.that.serves.json.com/json/ | json_xs

или это:

$ wget -q -O - http://page.that.serves.json.com/json/ | json_xs

и для форматирования JSON, содержащегося в файле, вы можете сделать это:

$ json_xs < file-full-of.json

Чтобы переформатировать как YAML , что некоторые люди считают более понятным для человека, чем JSON:

$ json_xs -t yaml < file-full-of.json
19 голосов
/ 07 октября 2011

С Perl, если вы установите JSON :: PP из CPAN, вы получите команду json_pp . Кража примера из B Bycroft вы получаете:

[pdurbin@beamish ~]$ echo '{"foo": "lorem", "bar": "ipsum"}' | json_pp
{
   "bar" : "ipsum",
   "foo" : "lorem"
}

Стоит отметить, что json_pp поставляется с предустановленной Ubuntu 12.04 (как минимум) и Debian в /usr/bin/json_pp

17 голосов
/ 16 июля 2018

Вы можете использовать эту простую команду для достижения результата:

echo "{ \"foo\": \"lorem\", \"bar\": \"ipsum\" }"|python -m json.tool
16 голосов
/ 15 сентября 2017
  1. brew install jq
  2. command + | jq
  3. (пример: curl localhost:5000/blocks | jq)
  4. Наслаждайтесь!

enter image description here

15 голосов
/ 25 февраля 2018

jj работает очень быстро, может экономно обрабатывать огромные документы JSON, не связывается с действительными числами JSON и прост в использовании, например,

jj -p # for reading from STDIN

или

jj -p -i input.json

Он (2018) все еще довольно новый, поэтому, возможно, он не будет обрабатывать недействительный JSON так, как вы ожидаете, но его легко установить на основные платформы.

12 голосов
/ 03 сентября 2018

bat - это клон cat с подсветкой синтаксиса:

Пример:

echo '{"bignum":1e1000}' | bat -p -l json

-p будет выводиться без заголовков, а -l будет явно указывать язык.

Он имеет раскраску и форматирование для JSON и не имеет проблемы, отмеченные в этом комментарии: Как я могу красиво напечатать JSON в сценарии оболочки?

11 голосов
/ 23 ноября 2012

Установите yajl-tools с помощью команды ниже:

sudo apt-get install yajl-tools

тогда

echo '{"foo": "lorem", "bar": "ipsum"}' | json_reformat

10 голосов
/ 18 мая 2011

yajl очень хорошо, по моему опыту. Я использую его команду json_reformat, чтобы красиво печатать .json файлы в vim, помещая следующую строку в мой .vimrc:

autocmd FileType json setlocal equalprg=json_reformat
...