Существует ли (Unix) сценарий оболочки для форматирования JSON в удобочитаемой форме?
По сути, я хочу преобразовать следующее:
{ "foo": "lorem", "bar": "ipsum" }
... в нечто вроде этого:
{
"foo": "lorem",
"bar": "ipsum"
}
Существует ли (Unix) сценарий оболочки для форматирования JSON в удобочитаемой форме?
По сути, я хочу преобразовать следующее:
{ "foo": "lorem", "bar": "ipsum" }
... в нечто вроде этого:
{
"foo": "lorem",
"bar": "ipsum"
}
json
библиотеки python , но я также добавил фрагменты, чтобы получить подсветку синтаксиса.Ответы:
С Python 2.6+ вы можете просто:
или, если JSON находится в файле, вы можете сделать:
если JSON взят из интернет-источника, такого как API, вы можете использовать
Для удобства во всех этих случаях вы можете создать псевдоним:
Для еще большего удобства с небольшим количеством печатания, чтобы подготовить это:
для всех вышеперечисленных случаев. Вы можете вставить это,
.bashrc
и это будет доступно каждый раз в оболочке. Вызовите это какprettyjson_s '{"foo": "lorem", "bar": "ipsum"}'
.источник
pygmentize -l javascript
чтобы получить синтаксический цветной вывод в вашей командной строке. Редактировать : Если у вас есть установленные фрагменты, это.alias pretty='python -mjson.tool | pygmentize -l json
так что я могу просто запустить:command params | pretty
. Надеюсь это поможет. PS: если кому-то удастся расширить это на: а) удалить вывод curl, который я вижу каждый раз, и / или б) НЕ сортировать ключи json; пожалуйста, дайте мне знать, я буду очень благодарен.Ты можешь использовать:
jq
Он очень прост в использовании и отлично работает! Он может обрабатывать очень большие структуры JSON, включая потоки. Вы можете найти их уроки здесь .
Примеры использования:
. это идентификационный фильтр.
источник
--sort-keys
опция, которая полезна в некоторых случаях.curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq '.'
echo '{ "foo": "lorem", "bar": "ipsum" }' | jq . > myfile
.<<<
оператора - именно то, что я искал.Я использую аргумент "пробел",
JSON.stringify
чтобы красиво печатать JSON в JavaScript.Примеры:
Из командной строки Unix с Node.js, указав JSON в командной строке:
Возвращает:
Из командной строки Unix с Node.js, указав имя файла, содержащее JSON, и используя отступ из четырех пробелов:
Используя трубу:
источник
node -p "JSON.stringify(JSON.parse(process.argv[1]), null, '\t');"
также выводит результат в STDOUT.Я написал инструмент, который имеет один из лучших доступных форматировщиков «умных пробелов». Он производит более читаемый и менее подробный вывод, чем большинство других опций здесь.
Подчеркивание-кли
Вот как выглядит «умный пробел»:
Я могу быть немного предвзятым, но это потрясающий инструмент для печати и манипулирования данными JSON из командной строки. Он очень удобен в использовании и имеет обширную справку / документацию для командной строки. Это швейцарский армейский нож, которым я пользуюсь для выполнения 1001 разных небольших задач, что было бы удивительно раздражать, если бы я делал по-другому.
Последний вариант использования: Chrome, консоль Dev, вкладка Network, экспорт всего в виде файла HAR, "cat site.har | underscore select '.url' --outfmt text | grep mydomain"; теперь у меня есть хронологически упорядоченный список всех ссылок URL, сделанных во время загрузки сайта моей компании.
Довольно легко печатать:
То же самое:
То же самое, более явно:
Этот инструмент является моим текущим страстным проектом, поэтому если у вас есть какие-либо пожелания, есть большая вероятность, что я отвечу на них.
источник
[32m
,[33m
,[39m
наряду с некоторыми непечатаемыми перед каждым из них, что делает JSON не действительным. Однако одна только печать подчеркивания ничего не добавляет к файлу и отлично выполняет свою работу по форматированию.jq
но это отлично сработало для моего "JSON", у которого не было ключей с двойными кавычками.Я обычно просто делаю:
И для извлечения выбранных данных (в данном случае это значение «test»):
Если данные JSON находятся в файле:
Если вы хотите сделать все это за один раз, введите
curl
в командной строке токен аутентификации:источник
| prettyjson
Благодаря очень полезным указателям Дж.Ф. Себастьяна, вот немного улучшенный сценарий, который я придумал:
источник
dict
объекты не имеют определенного порядка. Попробуйте,json.dumps(json.loads('{"b": 1, "a": 2}'), sort_keys=False)
и вы все равно обнаружите, что они поменялись местами. Чтобы это исправить, импортOrderedDict
иload
прохождениеobject_pairs_hook=OrderedDict
.inputFile = sys.stdin
. Это позволяет передавать материал в сценарий следующим образом:curl http://somewhere.com/foo.json | pp_json.py
from collections import OrderedDict
.com! FormatJSON %!python -c "from collections import OrderedDict; import sys; import json; j = json.load(sys.stdin, object_pairs_hook=OrderedDict); json.dump(j, sys.stdout, sort_keys=False, indent=4, separators=(',', ': '))"
Обратите внимание, что разделители должны быть установлены как (',', ':'), чтобы избежать добавления добавляемых конечных пробелов: bugs.python.org/issue16333sort_keys = True
вместо этого, потому что я хочу использовать это для сравнения файлов JSON, и это работает как шарм.Если вы используете npm и Node.js, вы можете сделать,
npm install -g json
а затем передать команду черезjson
. Сделайте,json -h
чтобы получить все варианты. Он также может извлечь определенные поля и раскрасить вывод с помощью-i
.источник
С инструментами jq это не так просто .
Например:
источник
jq . file.json
:; но тожеcat file.json | jq
(без фильтра.
) тоже работает. (в Ubuntu / Linux; YMMV на разных платформах)С Perl используйте модуль CPAN
JSON::XS
. Устанавливает инструмент командной строкиjson_xs
.Проверка:
Откорректируйте файл JSON,
src.json
чтобыpretty.json
:Если нет
json_xs
, попробуйтеjson_pp
. «pp» для «чистого perl» - инструмент реализован только на Perl, без привязки к внешней библиотеке C (что и обозначает XS, Perl «Extension System»).источник
-t null
дал мне ноль: не действительный формат ... но оставив его, работал великолепно. Спасибо.На * nix чтение из стандартного ввода и запись в стандартный вывод работает лучше:
Поместите это в файл (я назвал мой "prettyJSON" после ответа AnC ) в вашей переменной PATH
chmod +x
, и все готово .источник
fileinput.input()
читает из стандартного ввода, если в командной строке не указаны файлы. ПримерJSON Ruby Gem поставляется со сценарием оболочки для предварительной настройки JSON:
Скрипт загрузки: gist.github.com/3738968
источник
json.tool
. Тем не менее, он также имеет ограничения по вложенности (nesting of 20 is too deep (JSON::NestingError)
).sudo apt-get install ruby-json-pure
вместоgem install
prettify_json.rb
?~/bin
папку (убедитесь , что в вашем PATH) переименованиеprettify_json.rb
доppj
и запуститьchmod +x ppj
. Теперь вы можете сделать что-то вродеcurl www.jsonsring.com/something.json | ppj
ОБНОВЛЕНИЕ Я использую
jq
сейчас, как предложено в другом ответе. Он чрезвычайно эффективен при фильтрации JSON, но, по своей сути, также является отличным способом печати JSON для просмотра.jsonpp - очень приятный принтер для командной строки.
Из README:
Если вы на Mac OS X, вы можете
brew install jsonpp
. Если нет, вы можете просто скопировать двоичный файл куда-нибудь в свой$PATH
.источник
python -mjson.tool
(из другого ответа здесь), и это заняло 10-20 секунд ...json_pp
- который хорошо форматирует json, хотя, несмотря на сходство в именовании, я считаю, что это совершенно другой проект, чемjsonpp
упомянутый здесьВот как я это делаю:
Это сокращает код и выполняет работу.
источник
простой bash-скрипт для красивой JSON-печати
json_pretty.sh
Пример:
источник
%*c
запись , поэтому я изменилprintf
кc=0; while (c++<offset) printf " "; printf $0;
. И у моего awk есть другое выражение, и обратный слеш не работает[]
. Я изменил регулярные выражения/^[[{]/
и/[]}]/
.grep
что было стерто по ошибке;)Попробуй
pjson
. У него есть цвета!Установите его с помощью
pip
:⚡ pip install pjson
А затем направьте любой контент JSON в
pjson
.источник
Примечание: Это не способ сделать это.
То же самое в Perl:
Примечание 2: если вы запускаете
хорошо читаемое слово становится \ u закодированным
Если остальная часть вашего конвейера будет корректно обрабатывать Unicode, и вы хотите, чтобы ваш JSON также был дружественным к человеку, просто используйте
ensure_ascii=False
и вы получите:
источник
to_json
кажется, не принимаются параметры. Но это работает:perl -MJSON -nE 'say JSON->new->pretty->encode(from_json $_)' text.json
python -m json.tool
.json.tool
примеры кода. 1. эта версия позволяет вам изменять некоторые параметры, например,indent
2. Во время публикации (2008) Python 2.4 все еще использовался , который не поддерживает-mjson.tool
Я использую jshon, чтобы делать именно то, что вы описываете. Просто беги:
Вы также можете передавать аргументы для преобразования данных JSON.
источник
Или с Руби:
источник
to_json
методов;Kernel#jj
только Pretty-печатает массивы и одинаковые хэши (или числа / строки / логические значения).echo { "foo": "lorem", "bar": "ipsum" } | ruby -r json -e 'jj JSON.parse gets'
Проверьте Jazor . Это простой JSON-анализатор командной строки, написанный на Ruby.
источник
curl
и это единственная команда, которая сделала это для меня.Вы можете использовать эту простую команду для достижения результата:
источник
JSONLint имеет реализацию с открытым исходным кодом на GitHub, которую можно использовать в командной строке или включить в проект Node.js.
а потом
или
источник
Просто передайте вывод
jq .
.Пример:
источник
cat <file_name.txt> | jq . > <output_name.txt>
brew install jq
если вы на Mac OS.jq .
для симпатичной печати имеет один потенциальный недостаток: все существующие версии jq требуют обработки чисел JSON как чисел IEEE, поэтому точность легко теряется, например, для очень больших целых чисел.cat file |
неизменно является пустой тратой процесса; просто делайjq . <file_name.txt >output_name.txt
(с литералом<
и>
символами).С Perl, если вы установите JSON :: PP из CPAN, вы получите команду json_pp . Кража примера из B Bycroft вы получите:
Стоит отметить, что
json_pp
поставляется с предустановленной Ubuntu 12.04 (как минимум) и Debian в/usr/bin/json_pp
источник
Pygmentize
Я комбинирую Python's json.tool с pygmentize:
Есть несколько альтернатив пигментированию, которые перечислены в моем ответе .
Вот живая демонстрация:
источник
pygmentize -l json
чтобы получить цветообразование.python-pygments
, то естьapt-get install python-pygments
Я рекомендую использовать утилиту командной строки json_xs, которая включена в модуль perl JSON :: XS. JSON :: XS - это модуль Perl для сериализации / десериализации JSON, на компьютере с Debian или Ubuntu вы можете установить его следующим образом:
Это очевидно также доступно на CPAN .
Чтобы использовать его для форматирования JSON, полученного из URL, вы можете использовать curl или wget следующим образом:
или это:
и отформатировать JSON, содержащийся в файле, вы можете сделать это:
Чтобы переформатировать в YAML , который некоторые люди считают более понятным для человека, чем JSON:
источник
Вы можете просто использовать стандартные инструменты, такие как jq или json_pp.
echo '{ "foo": "lorem", "bar": "ipsum" }' | json_pp
или
echo '{ "foo": "lorem", "bar": "ipsum" }' | jq
оба преобразуют вывод, как показано ниже (jq еще более красочный):
Огромным преимуществом jq является то, что он может сделать намного больше, если вы хотите проанализировать и обработать json.
источник
jj работает очень быстро, экономно обрабатывает огромные JSON-документы, не работает с действительными числами JSON и прост в использовании, например:
или
Он (2018) все еще довольно новый, поэтому, возможно, он не будет обрабатывать недействительный JSON, как вы ожидаете, но его легко установить на основные платформы.
источник
brew install jq
command + | jq
curl localhost:5000/blocks | jq
)источник
bat
этоcat
клон с подсветкой синтаксиса:Пример:
-p
будет выводить без заголовков, и-l
будет явно указывать язык.Он имеет раскраску и форматирование для JSON и не имеет проблем, отмеченных в этом комментарии: Как я могу красиво напечатать JSON в сценарии оболочки?
источник
Установите yajl-tools с помощью команды ниже:
sudo apt-get install yajl-tools
тогда,
echo '{"foo": "lorem", "bar": "ipsum"}' | json_reformat
источник