JSONを人間が読める形式にフォーマットする(Unix)シェルスクリプトはありますか?
基本的に、私はそれが以下を変換したいです:
{ "foo": "lorem", "bar": "ipsum" }
...このようなものに:
{
"foo": "lorem",
"bar": "ipsum"
}
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"}'
ます。
以下のコメントで@pndが指摘しているように、Python 3.5以降では、JSONオブジェクトはデフォルトでソートされなくなっていることに注意してください。並べ替えるには、--sort-keys
フラグを最後に追加します。つまり... | python -m json.tool --save-keys
。
次を使用できます。 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"
}
またはjq
、IDフィルターとともに使用します。
$ jq '.foo' <<< '{ "foo": "lorem", "bar": "ipsum" }'
"lorem"
の「space」引数を使用してJSON.stringify
、JavaScriptで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));\
});\
"
私は、利用可能な最高の「スマートホワイトスペース」フォーマッターの1つを備えたツールを作成しました。ここにある他のほとんどのオプションよりも読みやすく、冗長性の少ない出力を生成します。
アンダースコア-cli
これは「スマートホワイトスペース」がどのように見えるかです:
私は少し偏見があるかもしれませんが、コマンドラインからJSONデータを印刷および操作するための素晴らしいツールです。非常に使いやすく、豊富なコマンドラインヘルプ/ドキュメントがあります。それは私が1001の異なる小さなタスクに使用するスイスアーミーナイフであり、他の方法を行うのは驚くほど面倒です。
最新の使用例:Chrome、開発コンソール、[ネットワーク]タブ、すべてを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
このツールは私の現在の情熱的なプロジェクトなので、機能のリクエストがあれば、私がそれらに対処する可能性が高いです。
私は通常ただします:
echo '{"test":1,"test2":2}' | python -mjson.tool
そして、選択したデータ(この場合は「テスト」の値)を取得するには:
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
JFセバスティアンの非常に役立つポインターのおかげで、私が思いついたわずかに拡張されたスクリプトを次に示します。
#!/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))
npmとNode.jsを使用する場合はnpm install -g json
、コマンドを実行してからパイプすることができますjson
。やるjson -h
すべてのオプションを取得します。また、特定のフィールドを引き出して、出力を-i
。で色付けすることもできます。
curl -s http://search.twitter.com/search.json?q=node.js | json
jqツールを使用したネイティブな方法ではそれほど単純ではありません。
例えば:
cat xxx | jq .
Perlでは、CPANモジュールを使用しますJSON::XS
。コマンドラインツールをインストールしますjson_xs
。
検証:
json_xs -t null < myfile.json
JSONファイルsrc.json
をpretty.json
次のようにプリティファイします。
< src.json json_xs > pretty.json
お持ちでない場合はjson_xs
、お試しくださいjson_pp
。「pp」は「純粋なperl」を表します。ツールはPerlでのみ実装され、外部Cライブラリ(XSの略であるPerlの「拡張システム」)にバインドされません。
* 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
です。
JSON Ruby Gemは、JSONを美しくするためのシェルスクリプトにバンドルされています。
sudo gem install json
echo '{ "foo": "bar" }' | prettify_json.rb
スクリプトのダウンロード:gist.github.com/3738968
UPDATE私が使用している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
です。
かなりの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
それが私がそれをする方法です:
curl yourUri | json_pp
それはコードを短縮し、仕事を成し遂げます。
$ 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"
}
試してみてくださいpjson
。色あり!
でインストールしてくださいpip
:
⚡ pip install pjson
次に、JSONコンテンツをにパイプしますpjson
。
私はjshonを使用して、あなたが説明していることを正確に実行します。ただ走れ:
echo $COMPACTED_JSON_TEXT | jshon
引数を渡してJSONデータを変換することもできます。
この簡単なコマンドを使用して、次の結果を得ることができます。
echo "{ \"foo\": \"lorem\", \"bar\": \"ipsum\" }"|python -m json.tool
または、Rubyの場合:
echo '{ "foo": "lorem", "bar": "ipsum" }' | ruby -r json -e 'jj JSON.parse gets'
Jazorをチェックしてください。これは、Rubyで記述された単純なコマンドラインJSONパーサーです。
gem install jazor
jazor --help
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
出力をにパイプするだけjq .
です。
例:
twurl -H ads-api.twitter.com '.......' | jq .
Perlでは、CPANからJSON :: PPをインストールすると、json_ppコマンドを取得できます。B Bycroftから例を盗むと、次のようになります。
[[email protected] ~]$ echo '{"foo": "lorem", "bar": "ipsum"}' | json_pp
{
"bar" : "ipsum",
"foo" : "lorem"
}
json_pp
Ubuntu 12.04(少なくとも)とDebianがプリインストールされていることは言及する価値があります/usr/bin/json_pp
Pythonのjson.toolをpygmentizeと組み合わせます。
echo '{"foo": "bar"}' | python -m json.tool | pygmentize -g
私のこの回答にリストされているpygmentizeのいくつかの選択肢があります。
これがライブデモです:
jqやjson_ppなどの標準ツールを使用するだけです。
echo '{ "foo": "lorem", "bar": "ipsum" }' | json_pp
または
echo '{ "foo": "lorem", "bar": "ipsum" }' | jq
どちらも次のように出力を美しくします(jqはさらにカラフルです):
{
"foo": "lorem",
"bar": "ipsum"
}
jqの大きな利点は、jsonを解析して処理したい場合に、より多くのことを実行できることです。
JSON :: XSperlモジュールに含まれている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
jjは超高速で、巨大なJSONドキュメントを経済的に処理でき、有効なJSON番号を台無しにせず、使いやすいです。
jj -p # for reading from STDIN
または
jj -p -i input.json
(2018)はまだかなり新しいので、無効なJSONを期待どおりに処理できない可能性がありますが、主要なプラットフォームに簡単にインストールできます。
bat
cat
構文が強調表示されたクローンです。
例:
echo '{"bignum":1e1000}' | bat -p -l json
-p
ヘッダーなしで出力し-l
、言語を明示的に指定します。
JSONの色付けとフォーマットがあり、このコメントに記載されている問題はありません。シェルスクリプトでJSONをきれいに印刷するにはどうすればよいですか?
brew install jq
command + | jq
curl localhost:5000/blocks | jq
)以下のコマンドでyajl-toolsをインストールします。
sudo apt-get install yajl-tools
その後、
echo '{"foo": "lorem", "bar": "ipsum"}' | json_reformat
特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。
ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。
ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。
ジョエル・マクヘイル、マイク・コルター(スクリーンショット:Netflix)「私の神よ、これは1つのことを変えます。」これは、ジョエル・マクヘイルとのジョエル・マクヘイルショーの最後のジョークです。リアリティ番組の嘲笑と寛大なスナキネスの時間は、なじみのある顔を見つけます。
画像経由:@pancakeparadox(Twitter)。1997年にポケモンシリーズが初公開されて以来、チームロケット(またはラテンアメリカではチームロケット)として知られる悪役のグループは、何度もアッシュに直面してきました。
画像:ゲッティ私たち全員が千年もの間生きていて、私たちの体が燃える風によってほこりと長引く悲鳴だけに押し流されたと考えるのは驚くべきことです。私たちがそうしていないことを除いて、それはトランプ政権の最初の週の終わりであり、驚くほど多くの恐ろしいことがすでに起こっています。
そして今、あることを手に入れていると思っていたが、まったく別のことをしてしまった男の話。CBSニュースは、彼女が「ミニブタ」であるという誤ったふりをしてエスターを養子にしたカナダ人のスティーブジェンキンスの心温まる物語をもたらします。これは、特にせいぜいゴールデンレトリバーまたはセントバーナードをストラップします。
Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday
シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。
オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。
Bioscoutは、農家を運転席に置くという使命を負っています。Artesian(GrainInnovate)やUniseedと並んで、最新のシードラウンドでチームを支援できることをうれしく思います。問題真菌症による重大な作物の損失は、農民にとって試練であることが証明されています。
遠隔医療は、パンデミック後の時代では新しいものではなく、時代遅れの分野でもありません。しかし、業界を詳しく見ると、需要と供給の強力な持続可能性と、米国で絶え間ない革命となる強力な潜在的成長曲線を示しています。
2021年は、世界的なベンチャーキャピタル(VC)の資金調達にとって記録的な年でした。DealStreetAsiaによると、東南アジアも例外ではなく、この地域では年間で記録的な25の新しいユニコーンが採掘されました。
計算に対する私たちの欲求とムーアの法則が提供できるものとの間には、指数関数的に増大するギャップがあります。私たちの文明は計算に基づいています—建築と想像力の現在の限界を超える技術を見つけなければなりません。