我有一个Bash脚本。它以JSON获取数据。我需要将JSON数组转换为Bash数组。
例
{ "SALUTATION": "Hello world", "SOMETHING": "bla bla bla Mr. Freeman" }
在Bash中,我想要获得这样的值echo ${arr[SOMETHING]}。
echo ${arr[SOMETHING]}
如果您想要键和值,并且基于如何在JQ中将json对象转换为key =value格式,则可以执行以下操作:
$ jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")|.[]" file SALUTATION=Hello world SOMETHING=bla bla bla Mr. Freeman
以更通用的方式,您myarray[key] =value只需将语法提供jq给,就可以将值存储到这样的数组中:while``while ...do; ... done < <(command)
myarray[key] =value
jq
while``while ...do; ... done < <(command)
declare -A myarray while IFS="=" read -r key value do myarray[$key]="$value" done < <(jq -r 'to_entries|map("(.key)=(.value)")|.[]' file)
然后您可以遍历像这样的值:
for key in "${!myarray[@]}" do echo "$key = ${myarray[$key]}" done
对于此给定的输入,它将返回:
SALUTATION = Hello world SOMETHING = bla bla bla Mr. Freeman