Unixシェルスクリプトでcurl出力を読み取り可能なJSON形式で表示する


213

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"}

この方法で出力をフォーマットするにはどうすればよいですか?

回答:


532

これを試してください:

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に付属
Gilles Quenot '12

1
json_pp予想よりも逆の順序でデータをフォーマットするようです。データを元に戻す方法はありますか?
アントニオ

1
json_ppは、いくつかの入力形式と出力形式(そのうちの1つはJSON)の間で変換するPerlコマンドユーティリティです。デフォルトの入力フォーマットはjsonであり、デフォルトの出力フォーマットはprettyオプション付きのjsonです。
Fabijan Bajo 2017

3
json_ppソリューションへのパイプはとてもエレガントです。ありがとう
アンディ

1
ノードへのパイプは非常にエレガントです。ありがとう!
Matthew Zackschewski

53

JSON出力をきれいにしたいと思います。これはpythonを使用して実現できます。

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


回答ありがとうございます。しかし、私はPythonを使用していません。シェルを使用しています。シェルで私をガイドできますか
Jams

シェルからpythonを実行する@Jamsにより、きれいな出力が得られます。
agconti

Pythonがプリインストールされているため、優れたソリューションです。
Gayan Weerakutti 2017年

1
「|ヘッド」を追加すると、このPythonスクリプトで「壊れたパイプ」エラーが発生します。
しゃがむ子猫'18年

@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

これはGillesの回答に追加するものです。これを行うには多くの方法がありますが、個人的には、軽量で覚えやすく普遍的に利用できるものを好みます(たとえば、好みのLinuxフレーバーの標準LTSインストールが付属しているか、インストールが簡単です)。

オプションを優先順に示します。

Python Json.toolモジュール

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

長所:ほとんどどこでも利用可能。短所:色分けなし


jq(1回限りのインストールが必要な場合があります)

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、嫌いではありません)で開いて色を取得しました。
エッサ

8

json_reformatが非常に便利であることがわかりました。だから私は次のことをしました:

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

それでおしまい!


Ubuntuを使用している場合、jaj_reformatはyajl-toolsパッケージにあります。
Kevin


1

動機: curlコマンド要求の後に、きれいなJSON応答を出力したい。

解決策json_pp-いくつかの入力形式と出力形式の間で変換するコマンドラインツール(そのうちの1つはJSONです)。このプログラムはjson_xsからコピーされ、変更されました。デフォルトの入力フォーマットはjsonであり、デフォルトの出力フォーマットはprettyオプション付きのjsonです。

Synposisjson_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
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.