我正在修改某些技巧以添加AWS api网关集成,并且目前仍停留在此问题上。
使用此代码,我无法生成安全对象。
我遇到了错误:
jq: error: syntax error, unexpected ':', expecting '}' (Unix shell quoting issues?) at <top-level>, line 6:
.value.security |= [ { $authorizer_name : map(.) }]
今天这使我疯狂。
任何人都可以阐明这一点吗?
这是一个小复制品。
INPUT='{
"swagger": "2.0",
"paths": {
"integrations/systems/{system_id}/configurations": {
"get": {
"security": [
"https://api.com/internal-api"
]
}
}
}
}'
AUTHORIZER_NAME="cognito_user_pool"
jq --arg authorizer_name "${AUTHORIZER_NAME}" \
'.info.title |= "API"
| .info.description |= "REST API"
| .paths |= with_entries(
.value |= with_entries(
.value.security |= [ { $authorizer_name : "stuff" }]
)
)' <<< "${INPUT}"
编辑:
解决方案是用()
括住参数。 .value.security |= [ { ($authorizer_name) : "stuff" }]
答案 0 :(得分:1)
如@JeffMercado所建议,如果将$authorizer_name
括在括号中,则问题将消失:
{ ($authorizer_name) : "stuff" }
要点是,当使用此处的对象构造语法时,每个指定键名的表达式都必须用括号括起来,除非它是JSON字符串。