web-dev-qa-db-ja.com

コマンドラインからJSONファイルをきれいに印刷するにはどうすればよいですか?

JSON要素のシーケンスを含むファイルがあります。

{ element0: "lorem", value0: "ipsum" }
{ element1: "lorem", value0: "ipsum" }
...
{ elementN: "lorem", value0: "ipsum" }

JSONをフォーマットして、読み取り可能な形式でファイルコンテンツを表示するシェルスクリプトはありますか?

this postを見てきたので、良い出発点だと思います!

私のアイデアは、ファイル内の行を繰り返してから:

while read row; do echo ${row} | python -mjson.tool; done < "file_name"

誰か他のアイデアはありますか?

53
Luca Davanzo

ファイルからの結果をpython json tool 2.6以降にパイプします

cat 'file_name' | python -m json.tool
101
Shawn Vader

Python JSONツールを使用できます(Python 2.6+)が必要です。

例えば:

echo '{ "element0" : "lorem", "element1" : "ipsum" }' | python -m json.tool

それはあなたに与えるでしょう:

{
    "element0": "lorem",
    "element1": "ipsum"
}
47
Nimrod007

jq-軽量で柔軟なコマンドラインJSONプロセッサ

発見する必要があるよりも長い時間がかかったとき、これは独自のエントリに値すると感じました。 docker inspect -fのjson出力をきれいに印刷する簡単な方法を探していました。別の回答の一部として、Noufal Ibrahimによって上記で簡単に言及されました。

Jq Webサイトから( https://stedolan.github.io/jq/ ):

jqはJSONデータのsedに似ています-sed、awk、grep、friendsがテキストで遊ぶのと同じように簡単に構造化データをスライス、フィルター、マッピング、変換できます。

デフォルトでは色付きの出力を提供し、jqにパイプするだけです。

cat file | jq . 

例:

"Raw" json output vs jqにパイプされた同じ

43
Fonebone

Pygmentizeを使用したカラー出力+ Python json.tool

Pygmentize はキラーツールです。 こちらをご覧ください 私はpython json.tool with pygmentizeと組み合わせる

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

他の同様のツールとインストール手順については、上記のリンクをご覧ください。

ライブデモは次のとおりです。

demo

12

それらの束があります。私は個人的にこのエイリアスを.zshrc

pjson () {
        ~/bin/pjson.py | less -X
}

どこ pjson.py

#!/usr/bin/env python

import json
import sys

try:
    input_str = sys.stdin.read()
    print json.dumps(json.loads(input_str), sort_keys = True, indent = 2)
except ValueError,e:
    print "Couldn't decode \n %s \n Error : %s"%(input_str, str(e))

コマンドラインでそれをパイプとして使用できます(curl http://.... | pjson)。

OTOH、カスタムコードは負債なので、 jq があります。 Cで書かれており(したがって、PythonまたはNode)のような依存関係のない移植性があり、きれいに印刷するだけでなく、高速です。

5
Noufal Ibrahim

すべてのLinuxシステムにインストールできるjqパッケージを使用できます。以下のコマンドを使用してツールをインストールします。

# Redhat based systems(Centos)
yum install -y epel-release
yum install -y jq

# Debian based systems
apt install -y jq

その後、テキストストリームをjqツールにパイプできるようになります。

echo '{"test":"value", "test2":"value2"}' | jq

この回答が役立つことを願っています。

2
srimaln91

Mac OSでは、jqをコマンドでインストールします。

$ brew install jq

次のようなJSONをきれいに印刷できます。

$ curl -X GET http://localhost:8080/api/v1/appointments/1  | jq


  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   117    0   117    0     0   8404      0 --:--:-- --:--:-- --:--:--  9000
{
  "craeted_at": "10:24:38",
  "appointment_date": "2019-02-08",
  "name_of_doctor": "Monika",
  "status": true,
  "price": 12.5,
  "id": 1
}
1
Arefe

ショーンのソリューションがPython 3:

echo '{"foo": "bar"}' | python3 -m json.tool
1
Dave