パイプラインのJSON応答から値を内観するために使用できるUnix(フレーバーを選択)JSONパーサーをお勧めできますか?
Perlコアに組み込まれたモジュールを使用して、このコマンドラインパーサー(必要に応じてbashエイリアスに入れることができます)を使用できます。
Perl -MData::Dumper -MJSON::PP=from_json -ne'print Dumper(from_json($_))'
python -m json.tool
が好きです。これは、デフォルトでほとんどの* nixオペレーティングシステムでデフォルトで使用できるようです。
$ echo '{"foo":1, "bar":2}' | python -m json.tool
{
"bar": 2,
"foo": 1
}
しかし、これはすべてのキーをアルファベット順にソートすることに注意する必要があります。これは、jsonが順序付けられていないHashMapを使用した言語によって生成された場所で良いことです...
ポータブルCコンパイル済みツールを探している場合:
http://stedolan.github.com/jq/
ウェブサイトから:
jqは、JSONデータのsedに似ています-これを使用して、sed、awk、grepおよび友人は、テキストで遊ぶことができます。
jqは、非常に少ない労力で、必要なデータ形式に変換することができます。そのためのプログラムは、多くの場合、予想よりも短く簡単です。
チュートリアル: http://stedolan.github.com/jq/tutorial/
手動: http://stedolan.github.com/jq/manual/
ダウンロード: http://stedolan.github.com/jq/download/
コマンドラインJSON操作用に特別に設計されたモジュールを作成しました。
https://github.com/ddopson/underscore-cli
それはあなたが本当に簡単に強力なことをすることを可能にします:
cat earthporn.json | underscore select '.data .title'
# [ 'Fjaðrárgljúfur canyon, Iceland [OC] [683x1024]',
# 'New town, Edinburgh, Scotland [4320 x 3240]',
# 'Sunrise in Bryce Canyon, UT [1120x700] [OC]',
# ...
# 'Kariega Game Reserve, South Africa [3584x2688]',
# 'Valle de la Luna, Chile [OS] [1024x683]',
# 'Frosted trees after a snowstorm in Laax, Switzerland [OC] [1072x712]' ]
cat earthporn.json | underscore select '.data .title' | underscore count
# 25
underscore map --data '[1, 2, 3, 4]' 'value+1'
# prints: [ 2, 3, 4, 5 ]
underscore map --data '{"a": [1, 4], "b": [2, 8]}' '_.max(value)'
# [ 4, 8 ]
echo '{"foo":1, "bar":2}' | underscore map -q 'console.log("key = ", key)'
# key = foo
# key = bar
underscore pluck --data "[{name : 'moe', age : 40}, {name : 'larry', age : 50}, {name : 'curly', age : 60}]" name
# [ 'moe', 'larry', 'curly' ]
underscore keys --data '{name : "larry", age : 50}'
# [ 'name', 'age' ]
underscore reduce --data '[1, 2, 3, 4]' 'total+value'
# 10
そして、利用可能な最高の「スマートホワイトスペース」JSONフォーマッターの1つがあります。
機能のリクエストがある場合は、この投稿にコメントするか、githubに問題を追加してください。コミュニティのメンバーが必要とする機能に優先順位を付けてうれしいです。
スタックにnode.jsとnpmがある場合は、 JSONコマンドライン処理ツールキット もあります。
また、別の "json"コマンド は、UnixコマンドラインでJSONをマッサージします。
そして、他の選択肢は次のとおりです。
チェックアウト TickTick 。
これは真のBash JSONパーサーです。
#!/bin/bash
. /path/to/ticktick.sh
# File
DATA=`cat data.json`
# cURL
#DATA=`curl http://foobar3000.com/echo/request.json`
tickParse "$DATA"
echo ``pathname``
echo ``headers["user-agent"]``
誰かがJshonまたはJSON.shに言及しましたか?
https://github.com/keenerd/jshon
jsonをパイプし、jsonオブジェクトを走査し、現在のオブジェクト(JSON配列として)へのパスを出力し、次に空白なしでオブジェクトを出力します。
http://kmkeen.com/jshon/
Jshonはjdinテキストをstdinからロードし、アクションを実行してから、stdoutの最後のアクションを表示し、通常のテキスト処理パイプラインの一部としても作成されました。
this answer で提案されているように jsawk を試すことができます。
本当にこれを行うには、簡単なpythonスクリプトを作成できます。
Bash/Pythonの場合、ここにPythonのsimplejson
の基本的なラッパーがあります。
json_parser() {
local jsonfile="my_json_file.json"
local tc="import simplejson,sys; myjsonstr=sys.stdin.read(); "`
`"myjson=simplejson.loads(myjsonstr);"
# Build python print command based on $@
local printcmd="print myjson"
for (( argn=1; argn<=$#; argn++ )); do
printcmd="$printcmd['${!argn}']"
done
local result=$(python -c "$tc $printcmd.keys()" <$jsonfile 2>/dev/null \
|| python -c "$tc $printcmd" <$jsonfile 2>/dev/null)
# For returning space-separated values
echo $result|sed -e "s/[]|[|,|']//g"
#echo $result
}
ネストされた辞書スタイルのデータのみを実際に処理しますが、私が必要とするものには機能し、jsonをウォークスルーするのに役立ちます。おそらく味に適応することができます。
とにかく、さらに別の外部依存関係をソースにしたくない人のために、自分で作ったもの。もちろん、Pythonを除きます。
例json_parser {field1} {field2}
はprint myjson['{field1}']['{field2}']
を実行し、スペースで区切られた{field2}
に関連付けられたキーまたは値を生成します。
jkid を作成しました。これは、大きなjsonオブジェクトを簡単に調べるために作成した小さなコマンドラインjson Explorerです。オブジェクトは「横断的に」探索でき、コンソールのオーバーフローを避けるために「プレビュー」オプションがあります。
$ echo '{"john":{"size":20, "eyes":"green"}, "bob":{"size":30, "eyes":"brown"}}' > test3.json
$ jkid . eyes test3.json
object[.]["eyes"]
{
"bob": "brown",
"john": "green"
}