UnixコマンドラインJSONパーサー?[閉まっている]


128

パイプラインでJSON応答からの値をイントロスペクトするために使用できるUnix(フレーバーを選択)JSONパーサーを推奨できますか?


pythonpy(github.com/russell91/pythonpy)を使用したい:cat a.json | py --ji -x 'x.attr'
RussellStewart



1
新しいツールが町にあります:ramda-cliは、RamdaのカレーAPIとLiveScript簡潔構文を使用します。jsonを入力として取り、関数を作成するように構築されています。npm install -g ramda-cli
Ehvince 2015年

回答:


18

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

perl -MData::Dumper -MJSON::PP=from_json -ne'print Dumper(from_json($_))'

1
これの出力に混乱しています。出力には、キーと値の間に太い矢印(=>)が含まれます。これはJSONではありません。
Landon Kuhn

7
@landon:いいえ、入力はJSONで、出力はネイティブPerlデータ構造です。必要に応じて、これをさらに操作できます。このワンライナーのポイントは、非常に読みやすいデータを生成することです。
Ether

1
あなたはJSON出力をしたい場合は、このPerlのワンライナーを使用することができますperl -e "use JSON; print to_json( decode_json(<>), { pretty => 1 } )"
ゲオルギーVladimirov

232

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

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

ただし、これはすべてのキーをアルファベット順にソートすることに注意してください。これは、jsonが、順序付けされていないHashMapを使用する言語によって生成された場合に適しています。


5
過小評価された答え。目的が有効なJSONを含むものとして特定のJSONファイルを検証することである場合、これは良いコマンドラインの代替です。
蠍座2012

10
この回答は、指定されたキーの値を検査する方法を説明していませんでした。
Colin Su

8
@ColinSuですが、それも元の質問ではありませんでした。json.toolきれいなjsonを印刷するための短い手です。シェルスクリプトでjsonデータを抽出/操作する必要がある場合は、何をするのjqに純粋な方法を使用します...
muhqu

@muhquええ、私はjson.tool毎日10回使用しています。質問の「イントロスペック」の意味を読み違えたと思いますので、指摘いただきありがとうございます。
Colin Su

1
IMMOこれは不正解です。Python json.toolは検証とプリティプリントjsonの2つのことしか実行しないためです。jsonのように値をイントロスペクトしませんjq
Devy

144

移植可能なCコンパイル済みツールを探している場合:

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

ウェブサイトから:

jqは sedの JSONデータのために-あなたはスライスし、フィルターにそれを使用し、マップと同じことを簡単に構造化されたデータを変換することができsedはawkはグレップと友人はあなたがテキストでプレイしてみましょう。

jqは、ほとんど手間をかけずに、お持ちのデータ形式を必要な形式に変換することができます。そのためのプログラムは、多くの場合、予想よりも短く簡単です。

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


20
ここでイモでベストアンサー。重い依存関係はなく、小さく、強力で、優れたドキュメントとそれを試すための簡単なこと。これを提案してくれてありがとう!
FrozenCow 2013年

Ubuntu / Debianの場合は、単にapt install jq
Pablo A

私はこれを何ヶ月も前に尋ね、愛することを学びましたjq
-JéQueue

63

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

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

  • 柔軟性-JSONデータを処理するための「スイスアーミーナイフ」ツール-シンプルなプリティプリンターとして、またはフル機能のJavaScriptコマンドラインとして使用できます。
  • POWERFUL -公開さunderscore.js(プラスunderscore.string)のフルパワーと機能
  • SIMPLE -それは単純な「perlの-pe」を使用するのと同様JSワンライナーを書くことができます
  • 連鎖 -複数のコマンドinvokationsは、パイプラインを処理したデータを作成するために一緒に連鎖させることができます
  • マルチフォーマット入力/出力フォーマットの豊富なサポート-印刷、厳密な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に問題を追加してください。コミュニティのメンバーが必要とする機能に優先順位を付けて喜んでいます。


驚くばかり!しかし、JSONデータに対してコンソールコマンドを実行することは可能ですか?例:wgetすべてのURLのURL配列を含むJSONファイルを指定します。
Camilo Martin

@CamiloMartin-これを行う最も簡単な方法は、URLを1行に1つずつ出力し、それをxargsまたはGNU Parallelで実行することです。
Dave Dopson 2013

@DaveDopson underscoreネストされたオブジェクトと配列を持つネストされたjsonの解析に使用できますか?
user227666 14

1
@ user227666-確かに。JSONは、多くのレベルのオブジェクトのネストをサポートしています。または、さらにJSONをエンコードする文字列を持つJSONを意味する場合があります。これも機能しますが、少し変更するだけで済みます。
Dave Dopson、2014

@DaveDopsonアンダースコアのサポートは「パターン」を「含む」、つまり 特定の「キー」、(大文字と小文字を区別しない)値の可能なセット?「jq」をマッチで試しましたが、うまくいきません。また、ここでは私の完全なユースケースを掲載- stackoverflow.com/questions/25463196/...
ekta

13

チェックアウトティックティック

真の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"]``

お奨めの愛のシェルレベルのツール:)
JEキュー

12

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

そして、UnixコマンドラインでJSONをマッサージするための別の「json」コマンド

そして、他の選択肢があります:


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


Ubuntuへのインストールが簡単:sudo apt-get install python-pip && sudo pip install jsonpipe
activout.se

@ divideandconquer.se申し訳ありませんが、npmを使用してこのツールをインストールしnpm install jsonます。
gitaarik 2014年

@rednaw残念ながら、NPMパッケージjsonは現在、まったく別のパッケージに引き継がれているようです。
ブラッド、

8

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

https://github.com/keenerd/jshon

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

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


OSXでの使用例:brew install jshoncat *.json | jshon
kenorb 2014


1

バッシュ/ 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}スペースで区切られて生成されます。


0

大きなjsonオブジェクトを簡単に探索するために作成した小さなコマンドラインjsonエクスプローラーであるjkidを作成しました。オブジェクトは「横断的に」探索でき、コンソールのオーバーフローを回避するために「プレビュー」オプションがあります。

$  echo '{"john":{"size":20, "eyes":"green"}, "bob":{"size":30, "eyes":"brown"}}' > test3.json
$  jkid . eyes test3.json 
object[.]["eyes"]
{
  "bob": "brown", 
  "john": "green"
}

jkidMac にインストールするにはどうすればよいですか?
user227666 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.