我正在構建一個需要將 json 有效負載發送到 API 的 bash 腳本。下面的有效載荷存盤在payload.json,將一直使用,并且與腳本在同一路徑中。這些""值是我需要用同一腳本中的變數填充的值。
{
"appId": "",
"appName": "",
"authType": "OIDC",
"authSettings": {
"applicationType": "SERVICE",
"clientAuthenticationType": "CLIENT_SECRET",
"grantTypes": [
"CLIENT_CREDENTIALS"
],
"groups": [
""
],
"responseTypes": [
"TOKEN"
],
"inclusion": [
"",
"",
"",
""
],
"tokenValidity": {
"accessTokenLifetimeMinutes": 60,
"refreshTokenLifetimeMinutes": 10080,
"refreshTokenWindowMinutes": 1440
}
}
}
我不確定如何正確實作這一目標。
如何同時將單個值傳遞給.appId,.appName并將多個值傳遞.groups[]給.inclusion[]?
我從每個變數的這條路徑開始,但一無所獲:
appId=31337
jq '.appId = "${appId}"' config.json > tempfile.json
任何幫助表示贊賞。
uj5u.com熱心網友回復:
我會使用一些“嵌套”的 jq 呼叫:
appId=1234
appName="My App"
groups=(g1 g2 g3)
inclusion=(i1 i2 i3 i4 i5)
jq --arg appId "$appId"\
--arg appName "$appName" \
--argjson groups "$(jq -n --args '$ARGS.positional' "${groups[@]}")" \
--argjson inclusion "$(jq -n --args '$ARGS.positional' "${inclusion[@]}")" \
' .appId = $appId
| .appName = $appName
| .authSettings.groups = $groups
| .authSettings.inclusion = $inclusion
' template.json
如果 appId 應該是生成的 JSON 中的數字,請使用--argjson而不是--arg
uj5u.com熱心網友回復:
您可以將--argand--argjson與空輸入一起使用,例如
jq -n --arg id "$appid" --arg name "$appname" \
--argjson groups '["your", "groups", "here"]' \
'{
"appId": $id,
"appName": $name,
"authType": "OIDC",
"authSettings": {
"applicationType": "SERVICE",
"clientAuthenticationType": "CLIENT_SECRET",
"grantTypes": [
"CLIENT_CREDENTIALS"
],
"groups": $groups,
"responseTypes": [
"TOKEN"
],
"inclusion": [
"",
"",
"",
""
],
"tokenValidity": {
"accessTokenLifetimeMinutes": 60,
"refreshTokenLifetimeMinutes": 10080,
"refreshTokenWindowMinutes": 1440
}
}
}'
或者,如果您無法將模板檔案修改為 jq 過濾器/程式,則可以加載它,然后將其與您的自定義引數合并。請注意,您需要完全匹配結構才能使其正常作業:
jq --arg appId 123 --argjson groups '["your","groups"]' \
'. * { $appId, authSettings: { $groups } }' template.json
或者通過分配每個屬性:
jq --arg appId 123 --argjson groups '["your","groups"]' \
'.appId = $appId | .authSettings.groups = $groups' tpl.json
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/520102.html
標籤:json重击jq
下一篇:如何在檔案中查找內容并替換相鄰值
