2016-01-26 88 views
5

如何將這些對象的json數組解析爲一個bash數組作爲字符串?如何將json數組轉換爲jq字符串的bash數組?

我努力做到以下幾點:

CONVO=$(get_json_array | jq '.[]') 
for CONVERSATION in $CONVERSATIONS 
do 
    echo "${CONVERSATION}" 
done 

但回聲打印出線條,而不是特定的對象。 對象的格式是:

{ "key1":"value1", "key2": "value2"} 

,我需要將它傳遞給一個API:

api_call '{ "key1":"value1", "key2": "value2"}' 

回答

8

問題是jq仍然只是輸出文本行; 您無法將每個數組元素保留爲一個單元。也就是說,只要換行符不是任何對象中的有效字符,仍然可以在單獨的行上輸出每個對象。

get_json_array | jq -c '.[]' | while read object; do 
    api_call "$object" 
done 

當然,這種假設下,你可以在bash 4使用readarray命令來創建數組:

readarray -t conversations < <(get_son_array | jq -c '.[]') 
for conversion in "${conversations[@]}"; do 
    api_call "$conversation" 
done 
+0

+1。 Re:「只要換行符不是任何對象中的有效字符」:由於這些是JSON對象,這不是一個問題。 – ruakh

+0

啊,我錯誤地認爲一個換行符可能出現在一個散列值中,但看起來他們需要編碼爲\ n。 – chepner

+0

如果您使用'jq -j'而不是'jq -r',那麼JQ本身不會添加任何分隔符,因此您可以從jq代碼中添加自己的分隔符(例如NUL文字)。 –

相關問題