シェルスクリプトでJSONをきれいに出力するにはどうすればよいですか?


3061

JSONを人間が読める形式にフォーマットする(Unix)シェルスクリプトはありますか?

基本的に、私はそれが以下を変換することを望みます:

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

...このようなものに:

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


7
:バックしながら、私は自分のAの短い圧延github.com/exhuma/braindump/tree/master/jsonformatコードはPythonの自身の使用して、非常にシンプルであるjsonライブラリを、私はよくGET構文の強調表示のようpygmentsを追加しました。
exhuma

これに偶然出会ったが、Json Prettyを見つけて、私はかなり気に入った。TypekitはAPIの例でそれを使用しているため、背後にいくつかのkloutがあります^^
Nick Tomlin

貼り付けをコピーしてもかまわない場合は、jsonprettyprint.netなどの簡単なツールをオンラインで使用して、未加工のJSONをすばやくきれいに印刷できます。
Javaaaa 2014年

7
警告:python -m json.toolは常に有効なJSONを生成するわけではありません。(ヒント:1e1000)
ピーク

回答:


4461

Python 2.6以降では、次のことができます。

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

または、JSONがファイル内にある場合は、次のようにできます。

python -m json.tool my_json.json

JSONがAPIなどのインターネットソースからのものである場合は、

curl http://my_url/ | python -m json.tool

これらすべてのケースで便利なように、エイリアスを作成できます。

alias prettyjson='python -m json.tool'

もう少しタイピングして準備を整えると、さらに便利になります。

prettyjson_s() {
    echo "$1" | python -m json.tool
}

prettyjson_f() {
    python -m json.tool "$1"
}

prettyjson_w() {
    curl "$1" | python -m json.tool
}

上記のすべての場合。これを入れる.bashrcとシェルでいつでも利用できます。のように呼び出しprettyjson_s '{"foo": "lorem", "bar": "ipsum"}'ます。


73
これをパイプしてpygmentize -l javascript、コマンドラインで構文色の出力を取得できます。編集:pygmentsがインストールされている場合は、それです。
Shrikant Sharat、2011

177
それがあると偉大な答えは、私だけが持って注意を促していますが知っておく必要があるかもしれない-ソート出力のキーを。
Chris Nash

14
myy .vimrc "nnoremap <f5>:%!python -m json.tool <CR>:w <CR>"
imwilsonxu

40
これは、Unicode文字を\ uXXXXにエスケープするようですが、これは不利な場合があります。
user1071136 2012年

14
私は、エイリアスを作成しました:alias pretty='python -mjson.tool | pygmentize -l json私はちょうど実行できるように:command params | pretty。お役に立てれば。PS:誰かがこれを拡張して、a)毎回目にするcurl-outputを削除したり、b)jsonキーをソートしたりしないでください。私に知らせてください、私は非常に感謝します。
クリントイーストウッド

1023

以下を使用できます。 jq

使い方はとても簡単で、とてもうまくいきます!ストリームを含む非常に大きなJSON構造を処理できます。あなたはここで彼らのチュートリアルを見つけることができます。

使用例:

$ jq --color-output . file1.json file1.json | less -R

$ command_with_json_output | jq .

$ jq . # stdin/"interactive" mode, just enter some JSON

$ jq . <<< '{ "foo": "lorem", "bar": "ipsum" }'
{
  "bar": "ipsum",
  "foo": "lorem"
}

。アイデンティティーフィルターです。


11
--sort-keysいくつかの場合に役立つオプションもあります。
Matthew Flaschen 2014年

9
curlの操作:curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq '.'
ホバールアン

19
「jq」はプリティプリンターとしては優れていますが、注意が必要です。jq(jqバージョン1.5まで)は、数値をIEEE 754 64ビット値として解析するため、非常に大きい数値と非常に小さい数値の値を変更します。お気に入りのプリティプリンターに同じ問題があるかどうかを確認するには、次の値を試してください:1e1000。python -mjson.toolは、JSONでさえないInfinityを生成するという点で、このテストにひどく失敗することに注意してください。
ピーク

1
注として、フォーマットされた結果をファイルにリダイレクトできます:echo '{ "foo": "lorem", "bar": "ipsum" }' | jq . > myfile
2016年

26
@Meekohi代替案は「エコーの不必要な使用」です。<<<オペレーターを見つけてとても嬉しい–まさに私が探していたもの。
jchook 2016

381

JSON.stringifyJavaScriptでJSONをきれいに出力するために「スペース」引数を使用します。

例:

// Indent with 4 spaces
JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, 4);

// Indent with tabs
JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, '\t');

Node.jsを使用したUnixコマンドラインから、コマンドラインでJSONを指定します。

$ node -e "console.log(JSON.stringify(JSON.parse(process.argv[1]), null, '\t'));" \
  '{"foo":"lorem","bar":"ipsum"}'

戻り値:

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

Node.jsを使用するUnixコマンドラインから、JSONを含むファイル名を指定し、4つのスペースのインデントを使用します。

$ node -e "console.log(JSON.stringify(JSON.parse(require('fs') \
      .readFileSync(process.argv[1])), null, 4));"  filename.json

パイプを使用する:

echo '{"foo": "lorem", "bar": "ipsum"}' | node -e \
"\
 s=process.openStdin();\
 d=[];\
 s.on('data',function(c){\
   d.push(c);\
 });\
 s.on('end',function(){\
   console.log(JSON.stringify(JSON.parse(d.join('')),null,2));\
 });\
"

10
Node.jsでオブジェクトをデバッグするには、JSON.stringify()ではなくsys.inspect()を実際に使用する必要があります。理由は次のとおり
Gurpartap Singh

11
反対投票。OPは「* nixコマンドラインスクリプト」に関するものであり、この答えは別のコンテキストです。
danorton 2012

49
@danorton:JSは、node.jsやその他の同様のソリューションを介してコマンドラインから使用できます。
calvinf 2012

10
コンソールは必要ありませんnode -p "JSON.stringify(JSON.parse(process.argv[1]), null, '\t');"。結果をSTDOUTに出力します。
ジュリアンD.

2
スクリプトがファイル名と標準入力で異なることは
Lukasz Wiktor

340

私は、利用可能な最高の「スマートホワイトスペース」フォーマッタの1つを備えたツールを作成しました。これは、ここにある他のほとんどのオプションよりも読みやすく、冗長でない出力を生成します。

underscore-cli

これは、「スマートスペース」のようになります。

私は少し偏っているかもしれませんが、コマンドラインからJSONデータを印刷および操作するための素晴らしいツールです。非常に使いやすく、豊富なコマンドラインヘルプ/ドキュメントがあります。それは私が1001の異なる小さなタスクに使用するスイスアーミーナイフです。

最新の使用例:Chrome、Devコンソール、ネットワークタブ、すべてをHARファイルとしてエクスポート、「cat site.har | underscore select '.url' --outfmt text | grep mydomain」; これで、会社のサイトのロード中に行われたすべてのURLフェッチの時系列のリストが得られました。

きれいな印刷は簡単です:

underscore -i data.json print

同じこと:

cat data.json | underscore print

同じこと、もっと明確:

cat data.json | underscore print --outfmt pretty

このツールは私の現在の情熱プロジェクトなので、機能のリクエストがあれば、私がそれらに対処する可能性が高いです。


4
今私はちょうどカール行うことができますエイリアスunderscor =「かなり--outfmt印刷アンダースコア」:私はまた、次の行を持っている私の〜/ .bash_profileを更新example.com/result.jsonを | アンダースコア、他のフォーマットにはアンダースコアを使用
Gal Bracha

デイブ、ありがとう!ツールがいい!alias pretty-json = "underrsore pretty"とcurl出力で目を楽しませます
Maxim Ponomarev

優れたフォーマットツール、ただ1つの注意:出力をファイルに転送する(-oオプションまたは>を使用)は、アンダースコア印刷でのみ機能しますアンダースコアかわいい色の書式設定兆候が挿入されていると、ファイルを保存し、なめらかのような:[32m[33m[39mJSONが有効でない可能おり、それらのそれぞれの前にいくつかの非印字と一緒に。ただし、アンダースコア印刷だけではファイルには何も追加されず、そのフォーマット作業は完全に行われます。
tiurin 2015年

私は大好きですjqが、これは二重引用符が付いていない "JSON"に最適です。
Bluu 2015

@DaveDopson素晴らしいツールをありがとう!! jsonselect.org/#tryitと一緒に使用してみてください...
mycargus

173

私は通常、ただ行います:

echo '{"test":1,"test2":2}' | python -mjson.tool

選択したデータを取得するには(この場合は、「test」の値):

echo '{"test":1,"test2":2}' | python -c 'import sys,json;data=json.loads(sys.stdin.read()); print data["test"]'

JSONデータがファイル内にある場合:

python -mjson.tool filename.json

curl認証トークンを使用してコマンドラインですべてを一度に実行したい場合:

curl -X GET -H "Authorization: Token wef4fwef54te4t5teerdfgghrtgdg53" http://testsite/api/ | python -mjson.tool

jsonがhttp apiから直接来ることになっている場合、これはpythonに実装された素晴らしいツールでもあります:github.com/jkbr/httpie
Florian

ノードがインストールされている場合(YAMLスタイルの出力を気にしない場合)、このパッケージもあります。rafeca.com / prettyjsonでカールを終了できます | prettyjson
Iolo

3
上記のように、JSONプリティプリンターとしてのpython -mjson.toolの問題の1つは、常にJSONを出力するとは限らないことです。たとえば、1e1000はInfinityになります(python 2.xまたは3.xを使用しているかどうか)。「jq」は常にJSONを生成しますが、非常に大きい(または非常に小さい値)が正確に保持されることを保証するものではありません。
ピーク

88

JF Sebastianの非常に役立つポインタのおかげで、私が思いついた少し強化されたスクリプトを次に示します。

#!/usr/bin/python

"""
Convert JSON data to human-readable form.

Usage:
  prettyJSON.py inputFile [outputFile]
"""

import sys
import simplejson as json


def main(args):
    try:
        if args[1] == '-':
            inputFile = sys.stdin
        else:
            inputFile = open(args[1])
        input = json.load(inputFile)
        inputFile.close()
    except IndexError:
        usage()
        return False
    if len(args) < 3:
        print json.dumps(input, sort_keys = False, indent = 4)
    else:
        outputFile = open(args[2], "w")
        json.dump(input, outputFile, sort_keys = False, indent = 4)
        outputFile.close()
    return True


def usage():
    print __doc__


if __name__ == "__main__":
    sys.exit(not main(sys.argv))

3
値がディクショナリに読み込まれると、順序が失われます。通常のdictオブジェクトには定義された順序がありません。試してみるjson.dumps(json.loads('{"b": 1, "a": 2}'), sort_keys=False)と、とにかく交換されていることがわかります。修正するには、をインポートOrderedDictしてload渡しobject_pairs_hook=OrderedDictます。
icktoofay 2013年

これを使用して、標準入力から読み取るようにスクリプトを変更できますinputFile = sys.stdin。これはあなたのようにのようなスクリプトへのパイプのようなものをすることができます:curl http://somewhere.com/foo.json | pp_json.py
ゲイブ・ジョンソン

1
また、@ icktoofayのコメントによる並べ替えを避けるには、次のようにOrderedDictをインポートしますfrom collections import OrderedDict
Hugo、

2
@icktoofayに感謝します。これにより、次のvim関数を作成でき com! FormatJSON %!python -c "from collections import OrderedDict; import sys; import json; j = json.load(sys.stdin, object_pairs_hook=OrderedDict); json.dump(j, sys.stdout, sort_keys=False, indent=4, separators=(',', ': '))" ました。末尾の空白が追加されないように、区切り文字は( '、'、 ':')に設定する必要があります。bugs.python.org
blindsnowmobile

素晴らしいスニペット!私が使ってきたsort_keys = True私は、JSONファイルを比較するために、これを使用すると、それは魔法のように動作するので、代わりに。
JL Peyret 2017年

81

npmとNode.jsを使用している場合は、実行してnpm install -g jsonから、コマンドをを介してパイプできますjson。やるjson -hすべてのオプションを取得します。また、特定のフィールドを引き出し、で出力を色分けすることもでき-iます。

curl -s http://search.twitter.com/search.json?q=node.js | json

79

jqツールを使用したネイティブな方法でそれほど単純ではありません

例えば:

cat xxx | jq .

7
警告:jqは、IEEE 754 64ビットfloatとして数値をエンコードするため、その表現は変更される可能性があります。非常に小さい数値および非常に大きい数値の精度は失われる可能性があります。お気に入りのプリティプリンターに同じ問題があるかどうかを確認するには、次の値を試してください:1e1000。
ピーク

5
または単に:jq . file.json; しかしcat file.json | jq(フィルターなしで.)も機能します。(ubuntu / linux上;プラットフォーム間でのymmv)
マイケル

73

Perlでは、CPANモジュールを使用しますJSON::XS。コマンドラインツールをインストールしますjson_xs

検証:

json_xs -t null < myfile.json

JSONファイルsrc.jsonpretty.json次のように整えます。

< src.json json_xs > pretty.json

お持ちでない場合はjson_xs、お試しくださいjson_pp。"pp"は "pure perl"を表します–このツールはPerlのみで実装され、外部Cライブラリ(XSはPerlの "Extension System"を表すもの)へのバインドはありません。


9
Cygwinには標準で搭載されているようです。
Janus Troelsen

12
json_ppは同じ方法で使用でき、おそらくシステムに簡単にインストールできます(Debianでは 'perl'パッケージにあります)。
MichielB

8
ちなみに、私のMac OS X 10.9システムでは、json_ppが自動的に利用できます。
グレッグウィリアムズ

-t nullnullを与えました:有効なtoformatではありません...しかしそれを省略することは素晴らしい働きをしました ありがとう。
ルーカス

ppは純粋なperl用であり、ここではプリティプリントではありません:) json_xsおよびjson_ppは、プリティプリントだけでなく、-json_optを使用してプリティプリントの代わりに他のことも実行できるためです。きれいな印刷がデフォルトの動作ですが。
Kjetil S.

70

* nixでは、stdinからの読み取りとstdoutへの書き込みがうまく機能します。

#!/usr/bin/env python
"""
Convert JSON data to human-readable form.

(Reads from stdin and writes to stdout)
"""

import sys
try:
    import simplejson as json
except:
    import json

print json.dumps(json.loads(sys.stdin.read()), indent=4)
sys.exit(0)

これをPATH 内のファイル(AnCの回答にちなんで「prettyJSON」と名付けました)に入れれchmod +xば、問題ありません。


実際、stdin / stdoutを使用する方がはるかに柔軟でシンプルです。指摘してくれてありがとう。
AnC、2009

3
名前付きファイルを必要とするプログラムの場合、/ dev / stdin、dittoをoutおよびerrに使用します。
dvogel

4
FYI fileinput.input()、コマンドラインで指定したファイルがない場合は標準入力から読み込みます。
jfs

fileinput.input()は、最後にチェックしたときに、最後に改行がないファイルをうまく処理できません。
ザカリーヴァンス

彼はPythonの他の言語ではなく、シェルスクリプトで尋ねます。JQでそれを完璧に行うことができます。
Bui Anh Tuan

65

JSON Ruby Gemには、JSONを美化するためのシェルスクリプトがバンドルされています。

sudo gem install json
echo '{ "foo": "bar" }' | prettify_json.rb

スクリプトのダウンロード: gist.github.com/3738968


6
このソリューションは、Pythonのとは異なり、Unicode "\ uxxxx"エスケープシーケンスをデコードすることに注意してくださいjson.tool。ただし、ネスト深度の制限もあるようです(nesting of 20 is too deep (JSON::NestingError))。
a3nm 2011年

2
Ubuntuでできること:sudo apt-get install ruby-json-pure代わりにgem install
Janus Troelsen

1
`` `eric-mbp:〜ericstob $ sudo gem install json Password:Fetching:json-1.7.3.gem(100%)ネイティブ拡張をビルドしています。これにはしばらく時間がかかります... json-1.7.3のインストールに成功しました1 gemがインストールされましたjson-1.7.3のriドキュメントをインストールしています... json-1.7.3のRDocドキュメントをインストールしています... eric-mbp:〜ericstob $ prettify_json .rb -bash:prettify_json.rb:コマンドが見つかりません
Eric Hartford

多分あなたはあなたの内容を投稿できますprettify_json.rbか?
アンドリュー

スクリプトをダウンロードし、~/binフォルダーに移動して(PATHにあることを確認してください)、名前prettify_json.rbをに変更しppjて実行しchmod +x ppjます。今、あなたは次のようなことができますcurl www.jsonsring.com/something.json | ppj
Uri

58

使用している更新jq別の回答で提案されているように、今ています。JSONのフィルタリングには非常に強力ですが、最も基本的には、JSONをきれいに表示して表示するための素晴らしい方法でもあります。

jsonppは、非常に優れたコマンドラインJSONプリティプリンターです。

READMEから:

次のようなきれいなWebサービス応答を印刷します。

curl -s -L http://<!---->t.co/tYTq5Pu | jsonpp

そして、ディスク上で実行されているファイルを美しくします。

jsonpp data/long_malformed.json

Mac OS Xを使用している場合は、次のことができbrew install jsonppます。そうでない場合は、バイナリをのどこかにコピーするだけ$PATHです。


1
巨大なファイル(> 60MB)に対してjsonpp(過去の成功例)を試しました。5分後に止めました。私はそれをpython -mjson.tool(ここでの他の回答から)パイプし、10〜20秒かかりました...
volker

60MBのJSON?うわー!私は通常、それほど大きくはありますが知っておくと便利なファイルを扱いません。ありがとう。
jordelver

私のubuntuボックスにはjson_pp-があります-これはjsonをうまくフォーマットしますが、命名は似ていますが、これはjsonppここで述べたものとはまったく異なるプロジェクトだと
思い

56

それが私のやり方です:

curl yourUri | json_pp

それはコードを短くして、仕事を終わらせます。


3
Ubuntuサーバー:インストールが非常に制限された実動マシンがある場合、デフォルトで特定の名前でインストールされるため、これが最良の選択かもしれません。Pythonは多くの場合、バージョンに応じてさまざまな方法でインストールされます(たとえば、python3、python、またはまったくインストールされない)。
ジョナサンジョ

55

かなりのjson印刷用の単純なbashスクリプト

json_pretty.sh

#/bin/bash

grep -Eo '"[^"]*" *(: *([0-9]*|"[^"]*")[^{}\["]*|,)?|[^"\]\[\}\{]*|\{|\},?|\[|\],?|[0-9 ]*,?' | awk '{if ($0 ~ /^[}\]]/ ) offset-=4; printf "%*c%s\n", offset, " ", $0; if ($0 ~ /^[{\[]/) offset+=4}'

例:

cat file.json | json_pretty.sh

1
フィードバックをお寄せいただきありがとうございます。今日、このスクリプトを個人用に書いたところ、私の場合は問題なく動作しました。私は修正を加えましたが、今は小さく、この問題はありません。完全にフォーマットをサポートするという目標はありませんが、必要に応じて他の修正を行うことができます。
Evgeny Karpov

2
それが私が見つけた唯一の実用的な答えです。私は組み込みLinuxを持っています-Ruby、JavaScript、Pythonモジュールをダウンロードするためのインターネットへのアクセスがない... %*c表記がサポートされていないawkが少し違うので、をに変更しprintfましたc=0; while (c++<offset) printf " "; printf $0;。そして、私のawkはエスケープする正規表現が異なり、バックスラッシュはで機能しません[]。正規表現を/^[[{]/とに変更しました/[]}]/
Zaboj Campula 2016年

2
これは...それはネイティブいっぱいだとして、受け入れられ、サードパーティ製のソフトウェアを必要としないでなければなりません
Blag

1
@EvgenyKarpovいいキャッチ、完全なロールバックの必要はありません、grepそれだけが誤って削除されました;)
Blag

1
おかげで、8 MBの1行のjsonを簡単なbashで簡単にフォーマットできました。
アーメドM

53

お試しくださいpjson。色があります!

エコー '{"json": "obj"} |  pjson

でインストールpip

⚡ pip install pjson

次に、JSONコンテンツをにパイプしますpjson


これにはpython-pip(sudo apt-get install python-pip)が必要で、次に(sudo pip install pjson)が必要です。大きな利点は色です。
Kristjan Adojaan 2013年

1
欠点は、カラー出力をgrepできないことです。
Kristjan Adojaan 2013年

51
$ echo '{ "foo": "lorem", "bar": "ipsum" }' \
> | python -c'import fileinput, json;
> print(json.dumps(json.loads("".join(fileinput.input())),
>                  sort_keys=True, indent=4))'
{
    "bar": "ipsum",
    "foo": "lorem"
}

注:それはない、それを行う方法。

Perlでも同じ:

$ cat json.txt \
> | perl -0007 -MJSON -nE'say to_json(from_json($_, {allow_nonref=>1}), 
>                                     {pretty=>1})'
{
   "bar" : "ipsum",
   "foo" : "lorem"
}

注2:実行する場合

echo '{ "Düsseldorf": "lorem", "bar": "ipsum" }' \
| python -c'import fileinput, json;
print(json.dumps(json.loads("".join(fileinput.input())),
                 sort_keys=True, indent=4))'

読みやすい単語は\ uエンコードされます

{
    "D\u00fcsseldorf": "lorem", 
    "bar": "ipsum"
}

あなたのパイプラインの残りの部分は、優雅にUnicodeを処理すると、あなたも人に優しい、単純であるためにあなたのJSONを希望した場合の使用 ensure_ascii=False

echo '{ "Düsseldorf": "lorem", "bar": "ipsum" }' \
| python -c'import fileinput, json;
print json.dumps(json.loads("".join(fileinput.input())),
                 sort_keys=True, indent=4, ensure_ascii=False)'

あなたが得るでしょう:

{
    "Düsseldorf": "lorem", 
    "bar": "ipsum"
}

実際、私は同じことをしますが、JavaScript自体を使用します:)
Robert Gould

2
私が持っているJSONモジュールのバージョンでは、to_jsonオプションを受け付けていないようです。しかし、これは動作します:perl -MJSON -nE 'say JSON->new->pretty->encode(from_json $_)' text.json
Rörd

Pythonの例は簡略化できます。JSON出力をに直接パイプする方がはるかに簡単python -m json.toolです。
Dan Loewenherz 2014年

@ダン:はい。そして、json.toolコード例を示すいくつかの回答があります。1.このバージョンでは、いくつかのパラメーターを変更できますindent。例:2.投稿(2008)の時点では、Python 2.4がまだ使用されていません-mjson.tool
jfs

40

私はjshonを使用して、あなたが説明していることを正確に実行します。ただ走れ:

echo $COMPACTED_JSON_TEXT | jshon

引数を渡してJSONデータを変換することもできます。


おかげで、jshonは同じタスクにpythonやrubyを使用するよりもはるかに高速です
Alexander

2
@Alexander-きれいなプリンターがどれくらい速く必要ですか?PythonがプリインストールされたOSx Lionを使用しています。python -mjson.toolを使用すると、96 KBのjsonファイルを0.1秒できれいに印刷できます。jshonがリンクするearthpornのjson出力は約24 KBで、0.08秒できれいに印刷できます。あなたにとってjshonはどれくらい速いですか?
joensson 2012年

1
私は1 + GB圧縮(非圧縮の大きささえ知っている)のJSONデータファイルを使用しているので、jshonの方が高速であるという提案に非常に感謝しています。
Ryan Ballantyne 2013

38

または、Rubyの場合:

echo '{ "foo": "lorem", "bar": "ipsum" }' | ruby -r json -e 'jj JSON.parse gets'

それは私にエラーを与えます。ruby jsonパッケージをインストールする必要がありますか?
mjs

3
はい、JSON Ruby Gemが必要です:sudo gem install json
darscan

@MatSchafferこれは、JSONを使用してカスタムto_jsonメソッドでオブジェクトをシリアル化している場合は機能しないことに注意してください。Kernel#jj同じ配列(または数値/文字列/ブール値)の配列とハッシュのみを表示します。
Phrogz '27 / 06/27

Windowsでは、この試してください: echo { "foo": "lorem", "bar": "ipsum" } | ruby -r json -e 'jj JSON.parse gets'
ロスAttrill

36

Jazorをチェックしてください。Rubyで書かれたシンプルなコマンドラインJSONパーサーです。

gem install jazor
jazor --help

4
それは私だけですか、それとも実際にOPの質問に答える唯一の提案ですか?私は、出力をパイプ処理できる簡単なコマンドを探してここに来ましたがcurl、これが私のためにそれを実行した唯一のコマンドです。
Leo Cassarani

2
私はそれが出力を色付けするオプションを持っているのが好きです。読みやすくします。
アンドリュー

私はこれを使用してREST APIの出力を表示しているので、URLを渡すオプションも気に入っています
Andrew

35

この簡単なコマンドを使用して、結果を得ることができます。

echo "{ \"foo\": \"lorem\", \"bar\": \"ipsum\" }"|python -m json.tool

私の意見では最良の回答です。小さくて覚えやすく、非標準のツールをインストールする必要はありません。
ユージーンC

python -m json.toolはJSONオブジェクトの順序を保持しないようです。
pushNpop

31

JSONLintのGitHubにはオープンソースの実装があり、コマンドラインで使用したり、Node.jsプロジェクトに組み込んだりできます。

npm install jsonlint -g

その後

jsonlint -p myfile.json

または

curl -s "http://api.twitter.com/1/users/show/user.json" | jsonlint | less

28

出力をにパイプするだけjq .です。

例:

twurl -H ads-api.twitter.com '.......' | jq .

素晴らしい回答@Ackshaey Singhも同じようにファイルに簡単にリダイレクトできます。例cat <file_name.txt> | jq . > <output_name.txt>
16年

9
brew install jqあなたがmac osを使っているなら。
Distwo

1
残念ながら、jq .pretty-printingの使用には1つの潜在的な欠点があります。jqの現存するすべてのバージョンは、JSON番号をIEEE番号として扱うことを要求しているため、非常に大きな整数などでは、精度が簡単に失われます。
ピーク

2
@Pramit cat file |は常にプロセスの無駄です。ただjq . <file_name.txt >output_name.txt(リテラル<>文字で)行います。
マークリード

24

色素沈着

Pythonのjson.toolとpygmentizeを組み合わせます。

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

私のこの回答に記載されいるpygmentizeの代替手段がいくつかあります

ここにライブデモがあります:

デモ


5
pygmentize -l json色を付けるために使用する必要がある場合があります。
JP

aptパッケージを使用してインストールしますpython-pygments(例apt-get install python-pygments
jan

23

Perlでは、CPANからJSON :: PPをインストールすると、json_ppコマンドが表示されます。B Bycroftからを盗むと、次のようになります。

[pdurbin@beamish ~]$ echo '{"foo": "lorem", "bar": "ipsum"}' | json_pp
{
   "bar" : "ipsum",
   "foo" : "lorem"
}

json_ppUbuntu 12.04(少なくとも)とDebianにプリインストールされていることは言及する価値があります/usr/bin/json_pp


19

JSON :: XS perlモジュールに含まれているjson_xsコマンドラインユーティリティを使用することをお勧めします。JSON :: XSはJSONをシリアライズ/デシリアライズするためのPerlモジュールであり、DebianまたはUbuntuマシンに次のようにインストールできます。

sudo apt-get install libjson-xs-perl

明らかにCPANでも利用できます。

これを使用してURLから取得したJSONをフォーマットするには、次のようにcurlまたはwgetを使用できます。

$ curl -s http://page.that.serves.json.com/json/ | json_xs

またはこれ:

$ wget -q -O - http://page.that.serves.json.com/json/ | json_xs

ファイルに含まれるJSONをフォーマットするには、次のようにします。

$ json_xs < file-full-of.json

一部の人々がJSONよりも人が読みやすいと考えるYAMLとして再フォーマットするには:

$ json_xs -t yaml < file-full-of.json

19

jqやjson_ppなどの標準ツールを使用するだけで済みます。

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

または

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

どちらも次のように出力をきれいにします(jqはさらにカラフルです)。

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

jqの大きな利点は、jsonを解析して処理したい場合に、より多くのことができることです。


json_ppは私のMacにありましたが、jqではありませんでした。ありがとう!
David H

1
: - @DavidHこのヘルプ行いstackoverflow.com/questions/37668134/...
Schmitzi

ありがとう!これまでにjqについて聞いたことがありません。
David H

17

jjは超高速であり、膨大なJSONドキュメントを経済的に処理でき、有効なJSON番号を台無しにせず、使いやすいです。

jj -p # for reading from STDIN

または

jj -p -i input.json

それは(2018)まだかなり新しいので、無効なJSONを期待どおりに処理しないかもしれませんが、主要なプラットフォームに簡単にインストールできます。




12

以下のコマンドを使用してyajl-toolsをインストールします。

sudo apt-get install yajl-tools

その後、

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


驚くばかり。別の言語/インタープリターを必要とせず、パッケージリポジトリにあります。醸造する必要はありません。
ジョセフ・ラスト2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.