2016-08-05 29 views
3

我想通過利用jq爲JSON格式的數據段中的每個字段運行bash命令。通過jq爲每個JSON項目運行bash命令

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

基本上我想要的那種東西:

foreach app: 
    echo "$key $val" 
done 

回答

3

假設你想列出鍵/的apps對象的值:

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

要使用別的程序輸出爲參數,您應該熟悉xargs

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

如果我想實際運行對這些值的工具,即:'的foreach應用: mytool $關鍵$ VAL done' – solemnify

+0

然後通過管道將結果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