Відображення результатів згортання у читаному форматі 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"}

Як я відформатую вихід таким чином?

Відповіді:


533

Спробуйте зробити це:

curl ... | json_pp 

або з використовуючи фільтр ідентичності:

curl ... | jq '.'

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

або з і :

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

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


1
Спробуйте спочатку без перенаправлення до файлу. Ви перевірили, чи встановлено json_pp або jq? Поставляється з perl
Жиль Кінот

1
json_ppЗдається, форматування даних буде у зворотному порядку, ніж очікувалося. Чи є спосіб зняти назад дані?
Антоніо

1
json_pp - це командна програма Perl, яка конвертує між деякими вхідними та вихідними форматами (один з них JSON). Формат вводу за замовчуванням - json, а формат виводу за замовчуванням - json з гарною опцією.
Fabijan Bajo

3
рішення "труба до json_pp" настільки елегантне. дякую
Енді

1
Труба в вузол дуже елегантна. Дякую!
Матвій Закшевський

53

Я здогадуюсь, що ви хочете придумати вихід JSON. Цього можна досягти за допомогою python:

curl http://localhost:8880/test.json | python -mjson.tool > out.json


Дякую за відповідь. Але я не використовую Python, я використовую оболонку. Ви можете керувати мною на оболонці
Джеми

@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

може також допомогти.


11

Ви можете використовувати цей модуль вузла

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

потім просто додати |jsonпісля завитку. curl http://localhost:8880/test.json |json


11

Це слід додати до відповіді Жиля. Існує багато способів зробити це, але особисто я віддаю перевагу щось легке, легке для запам'ятовування та повсюдно доступне (наприклад, із стандартними 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

8

Я знайшов json_reformat дуже зручним. Тому я просто зробив наступне:

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

Це воно!


Якщо ви використовуєте Ubuntu, ви можете знайти json_reformat в пакеті yajl-tools.
Кевін


1

Мотивація: Ви хочете надрукувати вподобаний JSON-відповідь після запиту команди 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
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.