How do I convert json array to bash array of strings with jq?

匿名 (未验证) 提交于 2019-12-03 03:08:02

问题:

How do I parse a json array of objects to a bash array with those objects as strings?

I am trying to do the following:

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

But the echo prints out lines instead of the specific objects. The format of the object is:

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

and I need to pass it to an api:

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

回答1:

The problem is that jq is still just outputting lines of text; you can't necessarily preserve each array element as a single unit. That said, as long as a newline is not a valid character in any object, you can still output each object on a separate line.

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

Of course, under that assumption, you could use the readarray command in bash 4 to build an array:

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!