Поделиться через


Функции объектов для шаблонов ARM

Resource Manager предоставляет несколько функций для работы с объектами в шаблоне Azure Resource Manager (шаблон ARM):

Подсказка

Bicep рекомендуется, так как он предлагает те же возможности, что и шаблоны ARM, и синтаксис проще использовать. Дополнительные сведения см. в разделе "Функции объектов ".

содержит

contains(container, itemToFind)

Проверяет, содержит ли массив значение, объект содержит ключ или строку, содержащую подстроку. При сравнении строк учитывается регистр. Тем не менее при проверке объекта на наличие ключа сравнение выполняется без учета регистра.

В Bicep используйте функцию contains .

Параметры

Параметр Обязательно Тип Описание
контейнер Да массив, объект или строка Значение, содержащее значение, которое необходимо найти.
itemToFind Да строка или целое число Значение, которое необходимо найти.

Возвращаемое значение

True, если элемент найден. В противном случае — False.

Пример

В следующем примере показано, как использовать contains с разными типами:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "stringToTest": {
      "type": "string",
      "defaultValue": "OneTwoThree"
    },
    "objectToTest": {
      "type": "object",
      "defaultValue": {
        "one": "a",
        "two": "b",
        "three": "c"
      }
    },
    "arrayToTest": {
      "type": "array",
      "defaultValue": [ "one", "two", "three" ]
    }
  },
  "resources": [
  ],
  "outputs": {
    "stringTrue": {
      "type": "bool",
      "value": "[contains(parameters('stringToTest'), 'e')]"
    },
    "stringFalse": {
      "type": "bool",
      "value": "[contains(parameters('stringToTest'), 'z')]"
    },
    "objectTrue": {
      "type": "bool",
      "value": "[contains(parameters('objectToTest'), 'one')]"
    },
    "objectFalse": {
      "type": "bool",
      "value": "[contains(parameters('objectToTest'), 'a')]"
    },
    "arrayTrue": {
      "type": "bool",
      "value": "[contains(parameters('arrayToTest'), 'three')]"
    },
    "arrayFalse": {
      "type": "bool",
      "value": "[contains(parameters('arrayToTest'), 'four')]"
    }
  }
}

Выходные данные значений по умолчанию из предыдущего примера:

Имя Тип Ценность
stringTrue Булев Верно
stringFalse Булев Неправда
objectTrue Булев Верно
objectFalse Булев Неправда
arrayTrue Булев Верно
arrayFalse Булев Неправда

createObject

createObject(key1, value1, key2, value2, ...)

Создает объект из ключей и значений.

Функция createObject не поддерживается Bicep. Создание объекта с помощью {}. См. статью "Объекты".

Параметры

Параметр Обязательно Тип Описание
Ключ1 нет струна Имя ключа.
значение1 нет int, boolean, string, object или array Значение ключа.
дополнительные ключи нет струна Дополнительные имена ключей.
дополнительные значения нет int, boolean, string, object или array Дополнительные значения для ключей.

Функция принимает только четное число параметров. Каждый ключ должен иметь соответствующее значение.

Возвращаемое значение

Объект с каждой парой ключей и значений.

Пример

В следующем примере создается объект из разных типов значений:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
  ],
  "outputs": {
    "newObject": {
      "type": "object",
      "value": "[createObject('intProp', 1, 'stringProp', 'abc', 'boolProp', true(), 'arrayProp', createArray('a', 'b', 'c'), 'objectProp', createObject('key1', 'value1'))]"
    }
  }
}

Выходные данные из предыдущего примера со значениями по умолчанию — это объект newObject со следующим значением:

{
  "intProp": 1,
  "stringProp": "abc",
  "boolProp": true,
  "arrayProp": ["a", "b", "c"],
  "objectProp": {"key1": "value1"}
}

пусто

empty(itemToTest)

Определяет, являются ли пустыми массив, объект или строка.

В Bicep используйте функцию empty .

Параметры

Параметр Обязательно Тип Описание
itemToTest Да массив, объект или строка Значение, которое необходимо проверить на наличие содержимого.

Возвращаемое значение

Возвращает результат True, если значение пустое. В противном случае — False.

Пример

В следующем примере проверяется, является ли массив, объект и строка пустыми:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "testArray": {
      "type": "array",
      "defaultValue": []
    },
    "testObject": {
      "type": "object",
      "defaultValue": {}
    },
    "testString": {
      "type": "string",
      "defaultValue": ""
    }
  },
  "resources": [
  ],
  "outputs": {
    "arrayEmpty": {
      "type": "bool",
      "value": "[empty(parameters('testArray'))]"
    },
    "objectEmpty": {
      "type": "bool",
      "value": "[empty(parameters('testObject'))]"
    },
    "stringEmpty": {
      "type": "bool",
      "value": "[empty(parameters('testString'))]"
    }
  }
}

Выходные данные значений по умолчанию из предыдущего примера:

Имя Тип Ценность
arrayEmpty Булев Верно
objectEmpty Булев Верно
stringEmpty Булев Верно

пересечение

intersection(arg1, arg2, arg3, ...)

Возвращает один массив или объект с общими элементами из параметров.

В Bicep используйте функцию intersection .

Параметры

Параметр Обязательно Тип Описание
Арг1 Да массив или объект Первое значение для поиска общих элементов.
arg2 Да массив или объект Второе значение для поиска общих элементов.
дополнительные аргументы нет массив или объект Дополнительные значения для поиска общих элементов.

Возвращаемое значение

Массив или объект с общими элементами.

Пример

В следующем примере показано, как использовать intersection массивы и объекты:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "firstObject": {
      "type": "object",
      "defaultValue": {
        "one": "a",
        "two": "b",
        "three": "c"
      }
    },
    "secondObject": {
      "type": "object",
      "defaultValue": {
        "one": "a",
        "two": "z",
        "three": "c"
      }
    },
    "firstArray": {
      "type": "array",
      "defaultValue": [ "one", "two", "three" ]
    },
    "secondArray": {
      "type": "array",
      "defaultValue": [ "two", "three" ]
    }
  },
  "resources": [
  ],
  "outputs": {
    "objectOutput": {
      "type": "object",
      "value": "[intersection(parameters('firstObject'), parameters('secondObject'))]"
    },
    "arrayOutput": {
      "type": "array",
      "value": "[intersection(parameters('firstArray'), parameters('secondArray'))]"
    }
  }
}

Выходные данные значений по умолчанию из предыдущего примера:

Имя Тип Ценность
objectOutput Объект {"one": "a", "три": "c"}
arrayOutput Массив ["two", "три"]

предметы

items(object)

Преобразует объект словаря в массив. Сведения о преобразовании массива в объект см . в toObject .

В Bicep используйте функцию items .

Параметры

Параметр Обязательно Тип Описание
объект Да объект Объект словаря, который нужно преобразовать в массив.

Возвращаемое значение

Массив объектов преобразованного словаря. У каждого объекта в массиве есть свойство key, которое содержит значение ключа для словаря. У каждого объекта также есть свойство value, которое содержит свойства объекта.

Пример

В следующем примере объект словаря преобразуется в массив, создав новый объект с измененными значениями для каждого объекта в массиве:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "copy": [
      {
        "name": "modifiedListOfEntities",
        "count": "[length(items(variables('entities')))]",
        "input": {
          "key": "[items(variables('entities'))[copyIndex('modifiedListOfEntities')].key]",
          "fullName": "[items(variables('entities'))[copyIndex('modifiedListOfEntities')].value.displayName]",
          "itemEnabled": "[items(variables('entities'))[copyIndex('modifiedListOfEntities')].value.enabled]"
        }
      }
    ],
    "entities": {
      "item002": {
        "enabled": false,
        "displayName": "Example item 2",
        "number": 200
      },
      "item001": {
        "enabled": true,
        "displayName": "Example item 1",
        "number": 300
      }
    }
  },
  "resources": [],
  "outputs": {
    "modifiedResult": {
      "type": "array",
      "value": "[variables('modifiedListOfEntities')]"
    }
  }
}

В предыдущем примере возвращаются следующие значения:

"modifiedResult": {
  "type": "Array",
  "value": [
    {
      "fullName": "Example item 1",
      "itemEnabled": true,
      "key": "item001"
    },
    {
      "fullName": "Example item 2",
      "itemEnabled": false,
      "key": "item002"
    }
  ]
}

В следующем примере показан массив, возвращающий функцию items :

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "entities": {
      "item002": {
        "enabled": false,
        "displayName": "Example item 2",
        "number": 200
      },
      "item001": {
        "enabled": true,
        "displayName": "Example item 1",
        "number": 300
      }
    },
    "entitiesArray": "[items(variables('entities'))]"
  },
  "resources": [],
  "outputs": {
    "itemsResult": {
      "type": "array",
      "value": "[variables('entitiesArray')]"
    }
  }
}

В примере возвращаются следующие значения:

"itemsResult": {
  "type": "Array",
  "value": [
    {
      "key": "item001",
      "value": {
        "displayName": "Example item 1",
        "enabled": true,
        "number": 300
      }
    },
    {
      "key": "item002",
      "value": {
        "displayName": "Example item 2",
        "enabled": false,
        "number": 200
      }
    }
  ]
}

В JSON объект представляет собой неупорядоченную коллекцию из нуля или более пар "ключ-значение". Упорядочение может быть разным в зависимости от реализации. Например функция Bicep items() сортирует объекты в алфавитном порядке. В других местах можно сохранить исходное упорядочение. Из-за этого недетерминированного, избегайте принятия каких-либо предположений о упорядочении ключей объектов при написании кода, который взаимодействует с параметрами развертывания и выходными данными.

JSON (формат обмена данными JavaScript)

json(arg1)

Преобразовывает допустимую строку JSON в тип данных JSON.

В Bicep используйте функцию json .

Параметры

Параметр Обязательно Тип Описание
Арг1 Да струна Значение, которое необходимо преобразовать в формат JSON. Строка должна быть правильно отформатированной строкой JSON.

Возвращаемое значение

Тип данных JSON из указанной строки или пустое значение, если указано значение null.

Замечания

Если необходимо включить значение параметра или переменную в объект JSON, используйте format функцию для создания строки, передаваемой функции.

Можно также использовать null() для получения значения NULL.

Пример

Ниже представлен пример использования функции json. Обратите внимание, что можно передать null пустой объект:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "jsonEmptyObject": {
      "type": "string",
      "defaultValue": "null"
    },
    "jsonObject": {
      "type": "string",
      "defaultValue": "{\"a\": \"b\"}"
    },
    "jsonString": {
      "type": "string",
      "defaultValue": "\"test\""
    },
    "jsonBoolean": {
      "type": "string",
      "defaultValue": "true"
    },
    "jsonInt": {
      "type": "string",
      "defaultValue": "3"
    },
    "jsonArray": {
      "type": "string",
      "defaultValue": "[[1,2,3 ]"
    },
    "concatValue": {
      "type": "string",
      "defaultValue": "demo value"
    }
  },
  "resources": [
  ],
  "outputs": {
    "emptyObjectOutput": {
      "type": "bool",
      "value": "[empty(json(parameters('jsonEmptyObject')))]"
    },
    "objectOutput": {
      "type": "object",
      "value": "[json(parameters('jsonObject'))]"
    },
    "stringOutput": {
      "type": "string",
      "value": "[json(parameters('jsonString'))]"
    },
    "booleanOutput": {
      "type": "bool",
      "value": "[json(parameters('jsonBoolean'))]"
    },
    "intOutput": {
      "type": "int",
      "value": "[json(parameters('jsonInt'))]"
    },
    "arrayOutput": {
      "type": "array",
      "value": "[json(parameters('jsonArray'))]"
    },
    "concatObjectOutput": {
      "type": "object",
      "value": "[json(concat('{\"a\": \"', parameters('concatValue'), '\"}'))]"
    }
  }
}

Выходные данные значений по умолчанию из предыдущего примера:

Имя Тип Ценность
emptyObjectOutput Boolean Верно
objectOutput Объект {"a": "b"}
stringOutput Струна тест
booleanOutput Boolean Верно
intOutput Целое число 3
arrayOutput Массив [ 1, 2, 3 ]
concatObjectOutput Объект { "a": "демонстрационное значение" }

длина

length(arg1)

Возвращает количество элементов в массиве, символов в строке или свойств корневого уровня в объекте.

В Bicep используйте функцию length .

Параметры

Параметр Обязательно Тип Описание
Арг1 Да массив, строка или объект Массив, используемый для получения числа элементов, строка, используемая для получения числа символов, или объект, используемый для получения числа свойств корневого уровня.

Возвращаемое значение

Целое число.

Пример

В следующем примере показано, как использовать length массив и строку:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "arrayToTest": {
      "type": "array",
      "defaultValue": [
        "one",
        "two",
        "three"
      ]
    },
    "stringToTest": {
      "type": "string",
      "defaultValue": "One Two Three"
    },
    "objectToTest": {
      "type": "object",
      "defaultValue": {
        "propA": "one",
        "propB": "two",
        "propC": "three",
        "propD": {
          "propD-1": "sub",
          "propD-2": "sub"
        }
      }
    }
  },
  "resources": [],
  "outputs": {
    "arrayLength": {
      "type": "int",
      "value": "[length(parameters('arrayToTest'))]"
    },
    "stringLength": {
      "type": "int",
      "value": "[length(parameters('stringToTest'))]"
    },
    "objectLength": {
      "type": "int",
      "value": "[length(parameters('objectToTest'))]"
    }
  }
}

Выходные данные значений по умолчанию из предыдущего примера:

Имя Тип Ценность
длина массива int 3
stringLength int 13 (тринадцать)
objectLength int 4

ноль

null()

Возвращает значение NULL.

Функция null недоступна в Bicep. Вместо этого используйте ключевое слово null.

Параметры

Функция null не принимает никаких параметров.

Возвращаемое значение

Значение, которое всегда равно NULL.

Пример

В следующем примере используется null функция:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [],
  "outputs": {
    "emptyOutput": {
      "type": "bool",
      "value": "[empty(null())]"
    }
  }
}

Выходные данные из предыдущего примера:

Имя Тип Ценность
emptyOutput Булев Верно

objectKeys

objectKeys(object)

Возвращает ключи из объекта, где объект является коллекцией пар "ключ-значение".

В Bicep используйте функцию objectKeys .

Параметры

Параметр Обязательно Тип Описание
объект Да объект Объект, являющийся коллекцией пар "ключ-значение".

Возвращаемое значение

Массив объектов .

Пример

В следующем примере показано, как использовать objectKeys с объектом:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "obj": {
      "a": 1,
      "b": 2
    }
  },
  "resources": [],
  "outputs": {
    "keyArray": {
      "type": "array",
      "value": "[objectKeys(variables('obj'))]"
    }
  }
}

Выходные данные из предыдущего примера:

Имя Тип Ценность
keyArray Массив [ "a", "b" ]

В JSON объект представляет собой неупорядоченную коллекцию из нуля или более пар "ключ-значение". Упорядочение может быть разным в зависимости от реализации. Например функция Bicep items() сортирует объекты в алфавитном порядке. В других местах можно сохранить исходное упорядочение. Из-за этого недетерминированного, избегайте принятия каких-либо предположений о упорядочении ключей объектов при написании кода, который взаимодействует с параметрами развертывания и выходными данными.

shallowMerge

shallowMerge(inputArray)

Объединяет массив объектов, в которых объединяются только объекты верхнего уровня. Это означает, что если объединенные объекты содержат вложенные объекты, эти вложенные объекты не объединяются глубоко; Вместо этого они полностью заменяются соответствующим свойством из объекта слияния.

В Bicep используйте функцию shallowMerge .

Параметры

Параметр Обязательно Тип Описание
inputArray Да массив Массив объектов.

Возвращаемое значение

Объект.

Пример

В следующем примере показано, как использовать shallowMerge:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "firstArray": [
      {
        "one": "a"
      },
      {
        "two": "b"
      },
      {
        "two": "c"
      }
    ],
    "secondArray": [
      {
        "one": "a",
        "nested": {
          "a": 1,
          "nested": {
            "c": 3
          }
        }
      },
      {
        "two": "b",
        "nested": {
          "b": 2
        }
      }
    ]
  },
  "resources": [],
  "outputs": {
    "firstOutput": {
      "type": "object",
      "value": "[shallowMerge(variables('firstArray'))]"
    },
    "secondOutput": {
      "type": "object",
      "value": "[shallowMerge(variables('secondArray'))]"
    }
  }
}

Выходные данные значений по умолчанию из предыдущего примера:

Имя Тип Ценность
firstOutput объект {"one":"a","two":"c"}
secondOutput объект {"one":"a","nested":{"b":2},"two":"b"b"}

FirstOutput показывает свойства из объединенных объектов в новый объект. Если имеются конфликтующие свойства (т. е. свойства с тем же именем), то свойство из последнего объекта, объединяемого, обычно имеет приоритет.

secondOutput показывает, что мелкое слияние не рекурсивно объединяет эти вложенные объекты. Вместо этого весь вложенный объект заменяется соответствующим свойством из объединяющего объекта.

tryGet

tryGet(itemToTest, keyOrIndex)

tryGet помогает избежать сбоев развертывания при попытке получить доступ к несуществующему свойству или индексу в объекте или массиве. Если указанный ключ или индекс не существует, возвращает значение NULL вместо того, tryGet чтобы вызвать ошибку.

В Bicep используйте оператор безопасной расшифровки .

Параметры

Параметр Обязательно Тип Описание
itemToTest Да массив, объект Объект или массив для просмотра.
keyOrIndex Да строка, целое число Ключ или индекс, извлекаемый из массива или объекта. Имя свойства для объектов или индексов для массивов.

Возвращаемое значение

Возвращает значение по ключу или индексу, если оно существует. Возвращает значение NULL, если ключ или индекс отсутствуют или отсутствуют границы.

Пример

В следующем примере проверяется, является ли массив, объект и строка пустыми:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "variables": {
    "users": {
      "name": "John Doe",
      "age": 30
    },
    "colors": [
      "red",
      "green"
    ]
  },
  "resources": [],
  "outputs": {
    "region": {
      "type": "string",
      "nullable": true,
      "value": "[tryGet(variables('users'), 'region')]"
    },
    "name": {
      "type": "string",
      "nullable": true,
      "value": "[tryGet(variables('users'), 'name')]"
    },
    "firstColor": {
      "type": "string",
      "nullable": true,
      "value": "[tryGet(variables('colors'), 0)]"
    }
  }
}

Выходные данные из предыдущего примера:

Имя Тип Ценность
регион Струна (NULL)
имя Струна Иван Петров
firstColor Струна Красный

союз

union(arg1, arg2, arg3, ...)

Возвращает из параметров один массив или объект со всеми элементами. Для массивов повторяющиеся значения включаются только один раз. Для объектов повторяющиеся имена свойств включаются только один раз.

В Bicep используйте функцию union .

Параметры

Параметр Обязательно Тип Описание
Арг1 Да массив или объект Первое значение для объединения элементов.
arg2 Да массив или объект Второе значение для объединения элементов.
дополнительные аргументы нет массив или объект Дополнительные значения для объединения элементов.

Возвращаемое значение

Массив или объект.

Замечания

Функция union использует последовательность параметров для определения порядка и значений результата.

Для массивов эта функция итеративно просматривает каждый элемент в первом параметре и добавляет в результат те из них, которые в нем еще не присутствуют. Затем он повторяет процесс для второго параметра и любых других параметров. Если значение уже включено в результат, сохраняется его прежнее расположение в массиве.

При просмотре объектов к результату добавляются имена и значения свойств из первого параметра. Для последующих параметров к результату добавляются новые имена свойств, если они есть. Если в последующем параметре есть свойство с именем, которое уже встречалось ранее, его значение перезаписывается поверх прежнего. Порядок свойств не гарантируется.

Функция union не только объединяет элементы верхнего уровня, но и рекурсивно объединяет все вложенные массивы и объекты внутри них. См. второй пример в следующем разделе.

Пример

В следующем примере показано, как использовать union массивы и объекты:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "firstObject": {
      "type": "object",
      "defaultValue": {
        "one": "a",
        "two": "b",
        "three": "c1"
      }
    },
    "secondObject": {
      "type": "object",
      "defaultValue": {
        "three": "c2",
        "four": "d",
        "five": "e"
      }
    },
    "firstArray": {
      "type": "array",
      "defaultValue": [ "one", "two", "three" ]
    },
    "secondArray": {
      "type": "array",
      "defaultValue": [ "three", "four" ]
    }
  },
  "resources": [
  ],
  "outputs": {
    "objectOutput": {
      "type": "object",
      "value": "[union(parameters('firstObject'), parameters('secondObject'))]"
    },
    "arrayOutput": {
      "type": "array",
      "value": "[union(parameters('firstArray'), parameters('secondArray'))]"
    }
  }
}

Выходные данные значений по умолчанию из предыдущего примера:

Имя Тип Ценность
objectOutput Объект {"one": "a", "two": "b", "три": "c2", "четыре": "d", "пять": "e"}
arrayOutput Массив ["one", "two", "три", "четыре"]

В следующем примере показана возможность глубокого слияния:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "firstObject": {
      "property": {
        "one": "a",
        "two": "b",
        "three": "c1"
      },
      "nestedArray": [
        1,
        2
      ]
    },
    "secondObject": {
      "property": {
        "three": "c2",
        "four": "d",
        "five": "e"
      },
      "nestedArray": [
        3,
        4
      ]
    },
    "firstArray": [
      [
        "one",
        "two"
      ],
      [
        "three"
      ]
    ],
    "secondArray": [
      [
        "three"
      ],
      [
        "four",
        "two"
      ]
    ]
  },
  "resources": [],
  "outputs": {
    "objectOutput": {
      "type": "Object",
      "value": "[union(variables('firstObject'), variables('secondObject'))]"
    },
    "arrayOutput": {
      "type": "Array",
      "value": "[union(variables('firstArray'), variables('secondArray'))]"
    }
  }
}

Выходные данные из предыдущего примера:

Имя Тип Ценность
objectOutput Объект {"property":{"one":"a","two":"b","three":"c2","four":"d","пять":"e"},"nestedArray":[3,4]}
arrayOutput Массив [["один","два"],["три"],["четыре","два"]]

Если вложенные массивы были объединены, значение objectOutput.nestedArray будет равно [1, 2, 3, 4], а значение arrayOutput будет [["один", "два", "три"], ["три", "четыре", "два"]].

Дальнейшие шаги

Описание разделов в шаблоне ARM приведено в статье Общие сведения о структуре и синтаксисе шаблонов ARM.