Мне нужна команда jq для замены значений массива не json стандартными значениями, т.е. при следующем вводе json мне нужно заменить значения массива "webOrigins" не-1023 * значением, которое является Замена переменной шаблона Jinja2 согласно второму блоку json ниже.
Вход (example.json
)
{
"clients": [
{
"clientId": "abc",
"webOrigins": [ "/", "/api" ]
},
{
"clientId": "xyz",
"webOrigins": [ ]
}
]
}
Требуемый выход
{
"clients": [
{
"clientId": "abc",
"webOrigins": {{clients.abc.webOrigins}}
},
{
"clientId": "xyz",
"webOrigins": {{clients.xyz.webOrigins}}
}
]
}
Моя текущая попытка сценария оболочки вызвать jq для l oop через ввод json и заменить на переменную шаблона это
for clientId in $(jq -r '.clients[] | .clientId' example.json)
do
jq '(.clients[] | select(.clientId == "'${clientId}'") | .webOrigins) |= {{ clients['\'${clientId}\''].webOrigins | default([]) }}' example.json > tmp.j2; mv -f tmp.j2 example.json
done
Но не удается с ошибкой:
jq: error: syntax error, unexpected '{' (Unix shell quoting issues?) at <top-level>, line 1:
(.clients[] | select(.clientId == "abc") | .webOrigins) |= {{ clients['abc'].webOrigins | default([]) }}
jq: 1 compile error
Конечно, если я добавлю двойные кавычки вокруг переменной шаблона, чтобы сделать заменяющую переменную действительной json скрипт работает, но мне нужно, чтобы значение не имело кавычек.