web-dev-qa-db-ja.com

UnixコマンドラインJSONパーサー?

パイプラインのJSON応答から値を内観するために使用できるUnix(フレーバーを選択)JSONパーサーをお勧めできますか?

119
Jé Queue

Perlコアに組み込まれたモジュールを使用して、このコマンドラインパーサー(必要に応じてbashエイリアスに入れることができます)を使用できます。

Perl -MData::Dumper -MJSON::PP=from_json -ne'print Dumper(from_json($_))'
15
Ether

python -m json.toolが好きです。これは、デフォルトでほとんどの* nixオペレーティングシステムでデフォルトで使用できるようです。

$ echo '{"foo":1, "bar":2}' | python -m json.tool
{
    "bar": 2, 
    "foo": 1
}

しかし、これはすべてのキーをアルファベット順にソートすることに注意する必要があります。これは、jsonが順序付けられていないHashMapを使用した言語によって生成された場所で良いことです...

223
muhqu

ポータブルCコンパイル済みツールを探している場合:

http://stedolan.github.com/jq/

ウェブサイトから:

jqは、JSONデータのsedに似ています-これを使用して、sedawkgrepおよび友人は、テキストで遊ぶことができます。

jqは、非常に少ない労力で、必要なデータ形式に変換することができます。そのためのプログラムは、多くの場合、予想よりも短く簡単です。

チュートリアルhttp://stedolan.github.com/jq/tutorial/
手動http://stedolan.github.com/jq/manual/
ダウンロードhttp://stedolan.github.com/jq/download/

135
Daan Mortier

コマンドラインJSON操作用に特別に設計されたモジュールを作成しました。

https://github.com/ddopson/underscore-cli

  • 柔軟-JSONデータを処理するための「swiss-army-knife」ツール-シンプルなプリティプリンターとして、またはフル機能として使用可能-powered Javascriptコマンドライン
  • 強力な-underscore.js(およびunderscore.string)のフルパワーと機能を公開します
  • SIMPLE-「Perl -pe」を使用するのと同様に、JSワンライナーを簡単に記述できます
  • 連鎖-複数のコマンド呼び出しを連鎖させて、データ処理パイプラインを作成できます。
  • MULTI-FORMAT-入力/出力形式の豊富なサポート-プリティプリント、厳格なJSONなど[近日公開]
  • 文書化-コマンドごとに複数の例を記載した優れたコマンドライン文書

それはあなたが本当に簡単に強力なことをすることを可能にします:

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に問題を追加してください。コミュニティのメンバーが必要とする機能に優先順位を付けてうれしいです。

60
Dave Dopson

スタックにnode.jsとnpmがある場合は、 JSONコマンドライン処理ツールキット もあります。

また、別の "json"コマンド は、UnixコマンドラインでJSONをマッサージします。

そして、他の選択肢は次のとおりです。


関連: nixのJSON入力を解析するためのコマンドラインツール?

12
zpoley

チェックアウト 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"]``
12
CoolAJ86

誰かがJshonまたはJSON.shに言及しましたか?

https://github.com/keenerd/jshon

jsonをパイプし、jsonオブジェクトを走査し、現在のオブジェクト(JSON配列として)へのパスを出力し、次に空白なしでオブジェクトを出力します。

http://kmkeen.com/jshon/
Jshonはjdinテキストをstdinからロードし、アクションを実行してから、stdoutの最後のアクションを表示し、通常のテキスト処理パイプラインの一部としても作成されました。

8
hewigovens

this answer で提案されているように jsawk を試すことができます。

本当にこれを行うには、簡単なpythonスクリプトを作成できます。

2
NG.

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}に関連付けられたキーまたは値を生成します。

1
Aaron R.

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