一尘不染

将JSON对象转换为Bash关联数组

json

我有一个Bash脚本。它以JSON获取数据。我需要将JSON数组转换为Bash数组。

{
  "SALUTATION": "Hello world",
  "SOMETHING": "bla bla bla Mr. Freeman"
}

在Bash中,我想要获得这样的值echo ${arr[SOMETHING]}


阅读 283

收藏
2020-07-27

共1个答案

一尘不染

如果您想要键和值,并且基于如何在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)

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
2020-07-27