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

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

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

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

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

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

Ответы [ 54 ]

10 голосов
/ 27 октября 2017

Используйте Ruby в одной строке:

echo '{"test":1,"test2":2}' | ruby -e "require 'json'; puts JSON.pretty_generate(JSON.parse(STDIN.read))"

И вы можете установить псевдоним для этого:

alias to_j="ruby -e \"require 'json';puts JSON.pretty_generate(JSON.parse(STDIN.read))\""

Тогда вы можете использовать его более удобно

echo '{"test":1,"test2":2}' | to_j

{
  "test": 1,
  "test2": 2
}

А если вы хотите отобразить JSON с цветом, вы можете установить awesome_print,

gem install awesome_print

тогда

alias to_j="ruby -e \"require 'json';require 'awesome_print';ap JSON.parse(STDIN.read)\""

Попробуй!

echo '{"test":1,"test2":2, "arr":["aa","bb","cc"] }' | to_j

Enter image description here

9 голосов
/ 18 апреля 2013

Версия 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
8 голосов
/ 06 марта 2015

Я использую 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
 }
7 голосов
/ 30 июня 2009

J.F. Решения Себастьяна у меня не сработали в Ubuntu 8.04.
Вот модифицированная версия Perl, которая работает со старой библиотекой 1.X JSON:

perl -0007 -MJSON -ne 'print objToJson(jsonToObj($_, {allow_nonref=>1}), {pretty=>1}), "\n";'
7 голосов
/ 06 августа 2013

Вот решение Ruby, которое лучше, чем команда prettify Json. Драгоценный камень colorful_json довольно хорош.

gem install colorful_json
echo '{"foo": "lorem", "bar": "ipsum"}' | cjson
{
  "foo": "lorem",
  "bar": "ipsum"
}
6 голосов
/ 15 февраля 2011
$ sudo apt-get install edit-json
$ prettify_json myfile.json
5 голосов
/ 31 июля 2016

Инструмент ydump - это симпатичный принтер JSON:

$ ydump my_data.json
{
  "foo": "lorem",
  "bar": "ipsum"
}

Или вы можете передать в JSON:

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

Это, вероятно, самое короткое решение, кроме использования инструмента jq.

Этот инструмент является частью библиотеки yojson для OCaml и задокументирован здесь .

В Debian и производных пакет libyojson-ocaml-dev содержит этот инструмент. В качестве альтернативы, yojson может быть установлен через OPAM .

4 голосов
/ 14 ноября 2015

Для Node.js вы также можете использовать модуль "util". Он использует подсветку синтаксиса, интеллектуальные отступы, удаляет кавычки из ключей и просто делает вывод настолько красивым, насколько это возможно.

cat file.json | node -e "process.stdin.pipe(new require('stream').Writable({write: chunk =>  {console.log(require('util').inspect(JSON.parse(chunk), {depth: null, colors: true}))}}))"
4 голосов
/ 09 декабря 2011

Вот как это сделать с помощью скрипта Groovy .

Создайте скрипт Groovy, скажем, "pretty-print"

#!/usr/bin/env groovy

import groovy.json.JsonOutput

System.in.withReader { println JsonOutput.prettyPrint(it.readLine()) }

Сделать исполняемый скрипт:

chmod +x pretty-print

Теперь из командной строки,

echo '{"foo": "lorem", "bar": "ipsum"}' | ./pretty-print
4 голосов
/ 09 декабря 2008

Есть TidyJSON .

Это C #, так что, возможно, вы сможете заставить его скомпилировать с Mono и работать на * nix. Хотя никаких гарантий, извините.

...