将对象的 json 数组转换为 bash 关联数组



我有一个json对象数组,我想将其转换为bash中的关联数组,并对键稍作改动

{
"Parameters": [
{
"Name": "/path/user_management/api_key",
"Type": "SecureString",
"Value": "1234",
"Version": 1
},
{
"Name": "/path/user_management/api_secret",
"Type": "SecureString",
"Value": "5678",
"Version": 1
}
]
}

我知道我需要使用 jq 和 sed,但我只是找不到做我正在寻找的事情的正确组合。 需要去掉"/path/user_management/",并将其余部分设置为键,并使用值作为值。

试图找到一个相当干净的一个衬里管道命令一起。 我最终想要的是一个 bash 关联数组,如下所示:

myArray[api_key]="1234"
myArray[api_secret]="5678"

要求单行代码与请求不可读代码一样好。如果要以正确的方式执行此操作,请在 while 循环中读取jq命令的输出,并根据需要去除不需要的字符。

#!/usr/bin/env bash
# declare an associative array, the -A defines the array of this type
declare -A _my_Array
# The output of jq is separated by '|' so that we have a valid delimiter
# to read our keys and values. The read command processes one line at a 
# time and puts the values in the variables 'key' and 'value'
while IFS='|' read -r key value; do
# Strip out the text until the last occurrence of '/' 
strippedKey="${key##*/}"
# Putting the key/value pair in the array
_my_Array["$strippedKey"]="$value"
done< <(jq -r '.Parameters[] | "(.Name)|(.Value)"' json)
# Print the array using the '-p' or do one by one
declare -p _my_Array

或者打印阵列,传统方式

for key in "${!_my_Array[@]}"; do 
printf '%s %sn' "${key}" "${_my_Array[$key]}"
done

最新更新