如何从Azure Key Vault返回的JSON权限数组中移除Null键?
处理Azure Key Vault Access Policies中权限字段的Null值
用jq工具处理(推荐方案)
jq是专门处理JSON的工具,直接在拉取命令后加管道就能完成需求,两种处理方式任选:
移除值为Null的权限字段
执行这条命令,会自动删掉permissions里值为null的键:
policies=$(az keyvault show --name $KeyVaultName --resource-group $ResourceGroupName --query "properties.accessPolicies" | jq 'map(.permissions |= with_entries(select(.value != null)))')
核心逻辑:遍历每个策略对象,对permissions字段过滤掉值为null的键值对。
将Null替换为空数组
如果想保留所有权限字段,只是把null换成空数组,用这条命令:
policies=$(az keyvault show --name $KeyVaultName --resource-group $ResourceGroupName --query "properties.accessPolicies" | jq 'map(.permissions |= with_entries(.value //= []))')
核心逻辑:对permissions里的每个字段,若值为null则替换成空数组[]。
用Azure CLI内置JMESPath查询处理
如果不想额外用jq,也可以直接用Azure CLI的--query参数构造查询,把null替换为空数组:
policies=$(az keyvault show --name $KeyVaultName --resource-group $ResourceGroupName --query "properties.accessPolicies[].{applicationId: applicationId, objectId: objectId, permissions: {certificates: permissions.certificates || [], keys: permissions.keys || [], secrets: permissions.secrets || [], storage: permissions.storage || []}, tenantId: tenantId}")
注意:这种方式需要手动列出所有权限子字段(certificates、keys、secrets、storage),如果后续Azure新增权限类型,得手动更新这条命令里的字段。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

