Как преобразовать массив json в массив строк bash с помощью jq?

как разобрать массив объектов 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"}'

1 ответов


проблема в том, что jq по-прежнему просто выводит строки текста;вы не можете обязательно сохранять каждый элемент массива как одну единицу. Тем не менее, пока новая строка не является допустимым символом в любом объекте, вы все равно можете выводить каждый объект в отдельной строке.

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

конечно, при этом предположении вы можете использовать на bash 4 для построения массива:

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