Отображение вывода curl в удобочитаемом формате JSON в сценарии оболочки Unix

215

В моем сценарии оболочки Unix, когда я выполняю команду curl, результат будет отображаться, как показано ниже, который я перенаправляю в файл:

{"type":"Show","id":"123","title":"name","description":"Funny","channelTitle":"ifood.tv","lastUpdateTimestamp":"2014-04-20T20:34:59","numOfVideos":"15"}

Но я хочу, чтобы этот вывод был помещен в читаемый формат JSON, как показано ниже в файле:

{"type":"Show",
"id":"123",
"title":"name",
"description":"Funny",
"channelTitle":"ifood.tv",
"lastUpdateTimestamp":"2014-04-20T20:34:59",
"numOfVideos":"15"}

Как мне отформатировать вывод таким образом?

Джемы
источник

Ответы:

537

Попробуйте сделать это:

curl ... | json_pp 

или с используя идентификационный фильтр:

curl ... | jq '.'

введите описание изображения здесь

или с и :

curl ... | node <<< "var o = $(cat); console.log(JSON.stringify(o, null, 4));"

Проверьте https://stedolan.github.io/jq/

Жиль Квено
источник
не могли бы Вы быть немного более подробными здесь, пожалуйста
Jams
1
json_ppкажется, форматирует данные в обратном порядке, чем ожидалось. Есть ли способ отменить данные?
Антонио
1
json_pp - это командная утилита Perl, которая конвертирует некоторые форматы ввода и вывода (один из них JSON). Формат ввода по умолчанию - json, а формат вывода по умолчанию - json с красивой опцией.
Фабиджан Баджо
3
решение pipe to json_pp настолько элегантно. спасибо
Энди
1
Труба в узел очень элегантна. Спасибо!
Мэтью Закшевский
53

Я предполагаю, что вы хотите предварительно подтвердить вывод JSON. Это может быть достигнуто с помощью Python:

curl http://localhost:8880/test.json | python -mjson.tool > out.json
0xBB
источник
Спасибо за ответы. Но я не использую Python, я использую оболочку. Можете ли вы направить меня на раковину
Jams
@Jams, который выполняет Python из оболочки, давая вам довольно печатный вывод.
agconti
Отличное решение, так как Python поставляется с предустановленным.
Гаян Виракутти
1
Этот скрипт на python выдает ошибку «сломанная труба», когда я добавляю «| head» к нему.
Крадущийся котенок
@CrouchingKitten Я сам не вижу этой проблемы (возможно, в разных версиях), но это может быть связано с тем, что headкоманда обрезает вывод, передаваемый по нему до достижения конца, тем самым «разрывая» трубу. Если вы разрешите headпотреблять весь поток данных из канала, я ожидаю, что ошибка не появится.
code_dredd
19
python -m json.tool
Curl http://127.0.0.1:5000/people/api.json | python -m json.tool

также может помочь

Вишну
источник
12

Это добавить к ответу Жиля. Есть много способов сделать это, но лично я предпочитаю что-то легкое, легко запоминающееся и универсально доступное (например, поставляемое со стандартными установками LTS вашего предпочтительного варианта Linux или простое в установке) в распространенных системах * nix.

Вот варианты в их предпочтительном порядке:

Модуль Python Json.tool

echo '{"foo": "lorem", "bar": "ipsum"}' | python -mjson.tool

плюсы: почти доступны везде; минусы: нет цветовой кодировки


JQ (может потребоваться однократная установка)

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

минусы: необходимо установить jq; плюсы: цветовая кодировка и универсальность


json_pp (доступно в Ubuntu 16.04 LTS)

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

Для пользователей Ruby

gem install jsonpretty
echo '{"foo": "lorem", "bar": "ipsum"}' | jsonpretty
Женхуа
источник
Спасибо @zhenhua! Я использовал cat myFile.json | python -mjson.tool >> myFilePretty.jsonзатем открыл в моем редакторе (vim, не ненавижу) и получил цвета.
Essa
11

Вы можете использовать этот модуль узла

[sudo] npm i -g json; // предлагаем не использовать привилегии root для установки модуля узла

затем просто добавьте |jsonпосле curl. curl http://localhost:8880/test.json |json

NanoNova
источник
8

Я нашел json_reformat очень удобным. Поэтому я просто сделал следующее:

curl http://127.0.0.1:5000/people/api.json | json_reformat

Это оно!

Raptor
источник
Если вы используете Ubuntu, вы можете найти json_reformat в пакете yajl-tools.
Кевин
1

Мотивация: Вы хотите напечатать ответ JSON prettify после запроса команды curl.

Решение : json_pp - инструмент командной строки, который конвертирует между некоторыми форматами ввода и вывода (одним из них является JSON). Эта программа была скопирована с json_xs и модифицирована. Формат ввода по умолчанию - json, а формат вывода по умолчанию - json с красивой опцией.

Синопсис : json_pp [-v] [-f from_format] [-t to_format] [-json_opt options_to_json1[,options_to_json2[,...]]]

Формула :<someCommand> | json_pp

пример :

Запрос

curl -X https://jsonplaceholder.typicode.com/todos/1 | json_pp 

отклик

{
   "completed" : false,
   "id" : 1,
   "title" : "delectus aut autem",
   "userId" : 1
}
avivamg
источник