tool - Как я могу напечатать JSON в сценарии оболочки(Unix)?




ubuntu json pretty print (20)

Pygmentize

Я совмещаю json.tool Python с pygmentize:

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

Есть несколько альтернатив pygmentize, которые перечислены в моем ответе .

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

Есть ли сценарий оболочки Unix для форматирования JSON в удобочитаемой форме?

В принципе, я хочу, чтобы он преобразовал следующее:

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

... в нечто подобное:

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

Vanilla Bash

Простой сценарий Bash ( grep / awk ) для довольно JSON-печати без сторонней установки:

json_pretty.sh

#/bin/bash

grep -Eo '"[^"]*" *(: *([0-9]*|"[^"]*")[^{}\["]*|,)?|[^"\]\[\}\{]*|\{|\},?|\[|\],?|[0-9 ]*,?' | awk '{if ($0 ~ /^[}\]]/ ) offset-=4; printf "%*c%s\n", offset, " ", $0; if ($0 ~ /^[{\[]/) offset+=4}'

Примеры:

1) Чтение файла и печать в консоли

cat file.json | json_pretty.sh

2) Используйте с окнами GIT Bash из файла в файл (на основе UTF8):

cat fileIn.json |sh.exe json_pretty.sh > fileOut.json

JSON Ruby Gem поставляется со сценарием оболочки, чтобы пресекать JSON:

sudo gem install json
echo '{ "foo": "bar" }' | prettify_json.rb

Загрузка gist.github.com/3738968 : gist.github.com/3738968


On * nix, чтение из stdin и запись в stdout работает лучше:

#!/usr/bin/env python
"""
Convert JSON data to human-readable form.

(Reads from stdin and writes to stdout)
"""

import sys
try:
    import simplejson as json
except:
    import json

print json.dumps(json.loads(sys.stdin.read()), indent=4)
sys.exit(0)

Поместите это в файл (я назвал свой «prettyJSON» после AnC ) в вашем PATH и chmod +x , и вам хорошо идти.


Версия PHP, если у вас PHP> = 5.4.

alias prettify_json=php -E '$o = json_decode($argn); print json_encode($o, JSON_PRETTY_PRINT);'
echo '{"a":1,"b":2}' | prettify_json

Вот как я это делаю:

curl yourUri | json_pp

Это сокращает код и выполняет задание.


Если вы используете npm и Node.js, вы можете сделать npm install -g json а затем выполнить команду через json . Сделайте json -h чтобы получить все варианты. Он также может вытащить определенные поля и раскрасить результат с помощью -i .

curl -s http://search.twitter.com/search.json?q=node.js | json

Или, с Ruby:

echo '{ "foo": "lorem", "bar": "ipsum" }' | ruby -r json -e 'jj JSON.parse gets'

Попробуйте pjson . Он имеет цвета!

Установите его с помощью pip :

⚡ pip install pjson

А затем pjson любой контент JSON в pjson .


Посмотрите на Jazor . Это простой синтаксический анализатор JSON, написанный на Ruby.

gem install jazor
jazor --help

С Perl используйте модуль CPAN JSON::XS . Он устанавливает инструмент командной строки json_xs .

Проверка:

json_xs -t null < myfile.json

Предоставьте JSON-файл src.json для pretty.json :

< src.json json_xs > pretty.json

Если у вас нет json_xs , попробуйте json_pp . «pp» предназначен для «чистого perl» - инструмент реализован только в Perl, без привязки к внешней библиотеке C (что означает XS, Perl «Extension System»).


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

[[email protected] ~]$ echo '{"foo": "lorem", "bar": "ipsum"}' | json_pp
{
   "bar" : "ipsum",
   "foo" : "lorem"
}

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


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

sudo apt-get install yajl-tools

затем,

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



Я использую httpie

$ pip install httpie

И вы можете использовать его так

 $ http PUT localhost:8001/api/v1/ports/my 
 HTTP/1.1 200 OK
 Connection: keep-alive
 Content-Length: 93
 Content-Type: application/json
 Date: Fri, 06 Mar 2015 02:46:41 GMT
 Server: nginx/1.4.6 (Ubuntu)
 X-Powered-By: HHVM/3.5.1

 {
     "data": [], 
     "message": "Failed to manage ports in 'my'. Request body is empty", 
     "success": false
 }

Я использую аргумент «space» для JSON.stringify для JSON.stringify печати JSON в JavaScript.

Примеры:

// Indent with 4 spaces
JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, 4);

// Indent with tabs
JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, '\t');

Из командной строки Unix с nodejs, указав json в командной строке:

$ node -e "console.log(JSON.stringify(JSON.parse(process.argv[1]), null, '\t'));" \
  '{"foo":"lorem","bar":"ipsum"}'

Возвращает:

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

Из командной строки Unix с Node.js, указав имя файла, содержащее JSON, и используя отступ из четырех пробелов:

$ node -e "console.log(JSON.stringify(JSON.parse(require('fs') \
      .readFileSync(process.argv[1])), null, 4));"  filename.json

Использование трубы:

echo '{"foo": "lorem", "bar": "ipsum"}' | node -e \
"\
 s=process.openStdin();\
 d=[];\
 s.on('data',function(c){\
   d.push(c);\
 });\
 s.on('end',function(){\
   console.log(JSON.stringify(JSON.parse(d.join('')),null,2));\
 });\
"

Я рекомендую использовать утилиту командной строки json_xs, которая включена в модуль JSON :: XS perl. 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


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

jj -p # for reading from STDIN

или же

jj -p -i input.json

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


ОБНОВЛЕНИЕ Я использую jq теперь, как предложено в другом ответе. Это чрезвычайно мощно при фильтрации JSON, но, по своему самому основному, также является удивительным способом красивой печати JSON для просмотра.

jsonpp - очень приятная командная строка JSON.

Из README:

Довольно печатайте ответы на веб-службу:

curl -s -L http://<!---->t.co/tYTq5Pu | jsonpp

и делайте красивые файлы, которые работают на вашем диске:

jsonpp data/long_malformed.json

Если вы находитесь в Mac OS X, вы можете brew install jsonpp . Если нет, вы можете просто скопировать двоичный файл где-нибудь в $PATH .





pretty-print