2017-04-03 4 views
5

jqを使用してjson配列内のすべてのjsonオブジェクトに対してbashコマンドを実行するにはどうすればよいですか?これまで私はこれを持っています:bqでjqを使用して配列内の各オブジェクトのコマンドを実行する

cat credentials.json | jq -r '.[] | .user, .date, .email' | mycommand -u {user} -d {date} -e {email} 

これはうまくいきません。どのように私のコマンドにjsonの配列のパラメータを取ることができますか?

私のJSONファイルは次のようになります。

[ 
    "user": "danielrvt", 
    "date": "11/10/1988", 
    "email": "[email protected]", 
    ... 
] 

答えて

9

あなたの最善の策は、その後、シェルループからのことを読ん出力におそらくTSV形式のようなもので、各レコードです。それはthey are working on itているようですが、

jq -r '.[]|[.user, .date, .email] | @tsv' | 
    while IFS=$'\t' read -r user date email; do 
    mycommand -u "$user" -d "$date" -e "$email" 
    done 

jq自体は、フィルタ内から外部コマンドを実行するには、systemコールのようなものを持っていません。

2

あなたはコマンドがそれを実行し、

.[] | "mycommand \(.user|@sh) \(.date|@sh) \(.email|@sh)" 

のようなものを実行するためにjq出力を持つことができます。何かのように

bash <(jq -r '.[] | "mycommand \(.user|@sh) \(.date|@sh) \(.email|@sh)"' foo) 
関連する問題