我正在寻找一种方法,将数组(例如字符串)转换为一个对象,其中的属性是从数组值生成的。
用例:我想基于资源名称列表生成一个tags
对象,其中包含指向资源的链接。我需要对link App Service
resources to an Application Insights
resource执行此操作。
可以使用参数提供资源列表:
"parameters": {
"appServices": {
"type": "array",
"metadata": {
"description": "Names of app services to link this application insights resource to via hidden tags"
}
}
}
样品输入:
['appName1', 'appName2', 'appName3']
示例输出:
"tags":
{
"[concat('hidden-link:', resourceId('Microsoft.Web/sites/', 'appName1'))]": "Resource",
"[concat('hidden-link:', resourceId('Microsoft.Web/sites/', 'appName2'))]": "Resource",
"[concat('hidden-link:', resourceId('Microsoft.Web/sites/', 'appName3'))]": "Resource"
}
我知道您可以使用copy
在数组上循环,但这将创建对象数组和而不是单个对象(这是标记所必需的),例如:
[
{
"[concat('hidden-link:', resourceId('Microsoft.Web/sites/', 'appName1'))]": "Resource"
},
{
"[concat('hidden-link:', resourceId('Microsoft.Web/sites/', 'appName2'))]": "Resource"
},
{
"[concat('hidden-link:', resourceId('Microsoft.Web/sites/', 'appName3'))]": "Resource"
}
]
可以使用union
再次合并这些对象,但是该函数要求您对要合并的对象进行硬编码,因此当您的输入具有可变长度时,它不起作用。
我正在寻找的是一种以动态的方式做到这一点的方法。
4条答案
按热度按时间ars1skjm1#
没有直接的选项可以将数组转换为对象。但是这里有一个技巧可以实现你所需要的。这将适用于任何长度的数组。
操作步骤:
1.将隐藏链接文本附加到服务名称
1.将数组转换为字符串
1.替换必要的符号并使其成为有效的json字符串。
1.使用json()将字符串转换为对象
mqxuamgl2#
我不确定这是否是解决此问题的最佳方法。
标签应该是关于特定对象/服务的元数据。Wouldn't it make more sense to apply a tag (say your system name, environment, etc..) and then run a query against azure on that tag?
这应该会达到拉回所有相关资源的相同结果。
mw3dktmi3#
我不知道它是否仍然相关,但自2021年以来,它可能与
items()
函数有关xurqigkl4#
既然lambdas已经是added to bicep,你可以用
reduce
将数组转换成对象。注意你减少的数组必须由对象项组成。如果不是,你可以用map
将它转换成对象。第一个