2016-08-05 9 views
3

jqを利用してJSON形式のデータの各フィールドにbashコマンドを実行したいとします。jqを使って各JSON項目のbashコマンドを実行する

{ 
    "apps": { 
     "firefox": "1.0.0", 
     "ie": "1.0.1", 
     "chrome": "2.0.0" 
    } 
} 

基本的に私は一種の何かをしたい:使用して別のプログラムを起動するに

$ jq -r '.apps | to_entries[] | "\(.key)\t\(.value)"' input.json 

foreach app: 
    echo "$key $val" 
done 

答えて

3

あなたはappsオブジェクトのキー/値をリストアップしたかったと仮定すると、引数として出力すると、xargsと知り合う必要があります。

$ jq -r '...' input.json | xargs some_program 
+0

: 'foreachのアプリ: mytool $キー$ valを – solemnify

+0

done'次にパイプ結果xargsのにまたは何か... –

+0

@JeffMercadoそのコメントへのもう少し説明が大歓迎です。 @solemnifyが 'apt-get install $ {APP} -y'のようなコマンドを実行しようとしているとしましょう。 'xargs'形式は何ですか? –

0

ここには可能な解決策を示すbashスクリプトがあります。

#!/bin/bash 
json=' 
{ 
    "apps": { 
     "firefox": "1.0.0", 
     "ie": "1.0.1", 
     "chrome": "2.0.0" 
    } 
}' 

jq -M -r ' 
    .apps | keys[] as $k | $k, .[$k] 
' <<< "$json" | \ 
while read -r key; read -r val; do 
    echo "$key $val" 
done 

私は実際にそれらの値に対してツールを実行したい場合はどう、すなわち出力例

chrome 2.0.0 
firefox 1.0.0 
ie 1.0.1 
関連する問題