У меня есть следующая структура вывода json в приложении логики Azure, использующая Parse JSONдействие:
[
{ "name": "John",
"working days":['monday', 'tuesday', 'friday'],
"starting hour": ['8 A.M'., '7 A.M', '8 A.M.']
},
{ "name": "Carl",
"working days":['monday', 'tuesday'],
"starting hour": ['6 A.M'., '6 A.M']
},
{ "name": "Claire",
"working days":['monday', 'wednesday', 'friday'],
"starting hour": ['8 A.M'., '6 A.M', '9 A.M.']
},
{ "name": "Lisa",
"working days":['monday', 'thursday','saturday'],
"starting hour": ['8 A.M'., '7 A.M', '8 A.M.']
}
]
Я хотел бы перебрать каждого пользователя и добавить условие, где "working days"equals tuesdayон должен возвращать соответствующий "starting hour". Например, 7 утра для Джона и 6 утра для Карла.
Я уже добавил действие For Eachпосле того, как Parse JSONвыполнить итерацию json, чтобы получить каждого человека, For Eachа затем добавил еще одно, чтобы пройти через working days. Затем я добавил Condition, чтобы соответствовать, если это вторник. Если да, то он возвращает true как логическое значение. Но как я могу заставить его вернуть соответствие starting hour?
Может быть, картина помогает визуализировать. Ниже, working daysи tuesdayпросто заполнители пробелов.
Спасибо и всего наилучшего!
Изменить: одинаковое количество значений в массивах, удалить ошибочно размещенные кавычки
Решение проблемы
Довольно сложно дать вам весь мой ответ на ваш вопрос, но это определение JSON (вы можете загрузить его в свой собственный клиент для тестирования и посмотреть, как оно работает) для моего логического приложения, которое даст вам подход, который я бы выбрал...
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {
"For_Each_Name": {
"actions": {
"Reset_Starting_Hour": {
"inputs": {
"name": "Starting Hour",
"value": "@{string('')}"
},
"runAfter": {
"Set_Index_=_0": [
"Succeeded"
]
},
"type": "SetVariable"
},
"Set_Index_=_0": {
"inputs": {
"name": "Index",
"value": 0
},
"runAfter": {
"Set_Working_Days_Array_Length": [
"Succeeded"
]
},
"type": "SetVariable"
},
"Set_Working_Days_Array_Length": {
"inputs": {
"name": "Working Days Array Length",
"value": "@length(items('For_Each_Name')?['working days'])"
},
"runAfter": {},
"type": "SetVariable"
},
"Until_Index_=_Working_Days_Array_Length": {
"actions": {
"Condition": {
"actions": {
"Set_Starting_Hour": {
"inputs": {
"name": "Starting Hour",
"value": "@{items('For_Each_Name')?['starting hour'][variables('Index')]}"
},
"runAfter": {},
"type": "SetVariable"
}
},
"expression": {
"and": [
{
"equals": [
"@items('For_Each_Name')?['working days'][variables('Index')]",
"tuesday"
]
}
]
},
"runAfter": {},
"type": "If"
},
"Increment_Index": {
"inputs": {
"name": "Index",
"value": 1
},
"runAfter": {
"Condition": [
"Succeeded"
]
},
"type": "IncrementVariable"
}
},
"expression": "@equals(variables('Index'), variables('Working Days Array Length'))",
"limit": {
"count": 10,
"timeout": "PT1H"
},
"runAfter": {
"Reset_Starting_Hour": [
"Succeeded"
]
},
"type": "Until"
}
},
"foreach": "@body('Parse_JSON')",
"runAfter": {
"Initialize_Index": [
"Succeeded"
]
},
"runtimeConfiguration": {
"concurrency": {
"repetitions": 1
}
},
"type": "Foreach"
},
"Initialize_Index": {
"inputs": {
"variables": [
{
"name": "Index",
"type": "integer"
}
]
},
"runAfter": {
"Initialize_Starting_Hour": [
"Succeeded"
]
},
"type": "InitializeVariable"
},
"Initialize_Starting_Hour": {
"inputs": {
"variables": [
{
"name": "Starting Hour",
"type": "string"
}
]
},
"runAfter": {
"Initialize_Working_Days_Array_Length": [
"Succeeded"
]
},
"type": "InitializeVariable"
},
"Initialize_Working_Days_Array_Length": {
"inputs": {
"variables": [
{
"name": "Working Days Array Length",
"type": "integer"
}
]
},
"runAfter": {
"Parse_JSON": [
"Succeeded"
]
},
"type": "InitializeVariable"
},
"Parse_JSON": {
"inputs": {
"content": [
{
"name": "John",
"starting hour": [
"8 A.M.",
"7 A.M.",
"8 A.M."
],
"working days": [
"monday",
"tuesday",
"friday"
]
},
{
"name": "Carl",
"starting hour": [
"6 A.M.",
"6 A.M."
],
"working days": [
"monday",
"tuesday"
]
},
{
"name": "Claire",
"starting hour": [
"8 A.M.",
"6 A.M.",
"9 A.M"
],
"working days": [
"monday",
"wednesday",
"friday"
]
},
{
"name": "Lisa",
"starting hour": [
"8 A.M.",
"7 A.M.",
"8 A.M."
],
"working days": [
"monday",
"thursday",
"saturday"
]
}
],
"schema": {
"items": {
"properties": {
"name": {
"type": "string"
},
"starting hour": {
"items": {
"type": "string"
},
"type": "array"
},
"working days": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"name",
"working days",
"starting hour"
],
"type": "object"
},
"type": "array"
}
},
"runAfter": {},
"type": "ParseJson"
}
},
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {},
"triggers": {
"Recurrence": {
"evaluatedRecurrence": {
"frequency": "Month",
"interval": 12
},
"recurrence": {
"frequency": "Month",
"interval": 12
},
"type": "Recurrence"
}
}
},
"parameters": {}
}
Предпосылка моего ответа состоит в том, чтобы определить, сколько элементов есть в каждом working daysмассиве, и оттуда он будет проходить через цикл (все время увеличивая индексную переменную), и если он найдет вторник как рабочий день, он получит связанный начальный час значение того же индекса.
Примечание: все массивы должны быть одинаковой длины, иначе могут возникнуть проблемы.
Также следует отметить одну вещь: это будет работать только в том случае, если для For Each Nameдействия установлено значение параллелизма 1...
Если вы не знаете, где это, вы найдете его в настройках самого действия.
Комментариев нет:
Отправить комментарий