我有以下代码读取所有fields
Json 文件(路径是PRIVATE_REGISTRATION_FILE
并将它们存储到关联数组 ( PRIVATE_FIELDS
) 中,稍后我会在代码中查询该数组:
declare -A PRIVATE_FIELDS
for PRICING_FIELD in $(jq -c -r '.fields[]' "${PRIVATE_REGISTRATION_FILE}")
do
FIELD_KEY=$(jq -r '.label' <<< "${PRICING_FIELD}")
PRIVATE_FIELDS["${FIELD_KEY}"]=${PRICING_FIELD}
done
问题是我用几个文件多次执行此操作,即使逻辑始终相同。
因此,我正在考虑将这个逻辑提取到一个函数中,但是我很难将 map 参数传递给它。
这是我尝试的:
function update_array
{
FILE_NAME=$1
eval "declare -A MAP="${2#*=}
for PRICING_FIELD in $(jq -c -r '.fields[]' "${FILE_NAME}")
do
FIELD_KEY=$(jq -r '.label' <<< "${PRICING_FIELD}")
MAP["${FIELD_KEY}"]=${PRICING_FIELD}
done
}
我这样称呼:
declare -A PRIVATE_FIELDS
update_array "myFile.json" "$(declare -p PRIVATE_FIELDS)"
但是它不起作用,地图仍然是空的。
echo ${PRIVATE_FIELDS["someKey"]}
>>> (empty)
我已经尝试了这个答案中提出的每个解决方案,但没有一个有效。我究竟做错了什么?
重击版本:4.2.46(2)-release
附加说明,Json 文件看起来像这样(显然调用jq
可能会减少):
{
"name": "Something",
"fields": [
{
"label": "key1",
"value": "value1",
"other": "other1"
},
{
"label": "key2",
"value": "value2",
"other": "other2"
}
]
}