2016-01-26 8 views
5

オブジェクトのjson配列を文字列としてbash配列に解析するにはどうすればよいですか?jsonで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"}' 

答えて

8

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

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 -r'の代わりに' jq -j'を使用すると、JQ自体によって区切り文字が追加されないため、jqコードから自分自身(NULリテラルなど)を追加できます。 –

関連する問題