格式化 ARM 模板中 if 语句中包含单引号和双引号的 JSON



我正在尝试以条件方式指定Microsoft.Compute/虚拟机资源的storageProfile属性。

根据是否设置了某个参数,应该使用某个JSON。 根据以下文档页面中的示例,这应该是可能的: https://learn.microsoft.com/en-us/azure/azure-resource-manager/resource-group-template-functions-logical#if


说明该问题的简化示例:

  "name": "string",
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2019-03-01",
  "location": "string",
  "tags": {},
  "properties": {
      "hardwareProfile": {
          "vmSize": "string"
  },
  "storageProfile": "[if(greater(parameters('myParameter', 0)), json('{\"dataDisks\": variables('myFirstVariable')}'), json('{\"dataDisks\": variables('mySecondVariable')}'))]"

我正在努力的部分是存储配置文件属性。

在包含上述内容的调试模式下提交 ARM 模板时出现错误。

cli.azure.cli.core.util : 无法解析 test.json 例外: 无效的 \escape:第 275 行第 110 列(字符 10373(解析失败 test.json 例外: 无效的 \escape:第 275 行第 110 列(字符 10373(

第 275 行的字符 110 是冒号 ":"。

如果两个 JSON 对象同时包含双引号和单引号,正确的请求应该是什么样子的?

有一个错误,错误不是针对 if 语句,而是针对更大的函数。它应该是这样的:

greater(parameters('myParameter'), 0)

您可以在此处获取有关greater的更多详细信息。而且似乎json函数的格式也错误,示例如下:

json('{"a": "b"}')

有关json函数的更多详细信息,请单击此处。

我可以在您发布的问题中找到的所有错误都在上面。如果有任何其他错误,则需要提供更多详细信息。希望对您有所帮助。

引号前面应该有一个反斜杠(\(。在下面试用:

{
  "name": "string",
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2019-03-01",
  "location": "string",
  "tags": {
  },
  "properties": {
    "hardwareProfile": {
      "vmSize": "string"
    },
    "storageProfile": "[if(greater(parameters('myParameter', 0)), json('{"dataDisks": variables('myFirstVariable')}'), json('{"dataDisks": variables('mySecondVariable')}'))]"
  }
}

最新更新