web-dev-qa-db-ja.com

jqでjson配列を文字列のbash配列に変換するにはどうすればよいですか?

オブジェクトのjson配列を文字列としてそれらのオブジェクトを使用して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"}'
9
Ela

問題は、jqがまだテキスト行を出力しているだけであるということです。 各配列要素を単一のユニットとして保持する必要はありません。とはいえ、改行がどのオブジェクトでも有効な文字でない限り、 各オブジェクトを別々の行に出力することもできます。

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

もちろん、その仮定の下では、readarray4でbashコマンドを使用して配列を作成できます。

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