将JSON数组转换为字符串的bash数组

v7pvogib  于 2022-11-26  发布在  其他
关注(0)|答案(3)|浏览(180)

如何将一个json对象数组解析为一个bash数组,并将这些对象作为字符串?
我正在尝试做以下事情:

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

但是echo输出的是行而不是特定的对象。对象的格式是:

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

我需要将它传递给一个API:

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

5uzkadbs1#

问题是jq仍然只是输出文本行;你不一定要把每个数组元素作为一个单元来保存。也就是说,只要换行符不是任何对象中的有效字符,你仍然可以在单独的行中输出每个对象。

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

在此假设下,您可以在bash 4中使用readarray命令来建立数组:

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

oug3syen2#

下面是一个没有循环的解决方案:

json=$(jq -c ".my_key[]"  ./my-file.json)
json_without_quotes=$(echo ${json//\"/""})
declare -a all_apps_array=($(echo $json_without_quotes | tr "\n" " "))
0x6upsns

0x6upsns3#

也是另一个选择,而不必循环。

jq -c ".response[]"  "${file}" | sed 's/[{|}]//g' | tr ',' '\n' | sed 's/"//g' | awk -F":" '{print toupper($1)":"$2}'

希望能帮到一些人

相关问题