Преобразование массива JSON в объект JSON в приложениях Azure Logic

#azure-logic-apps

#azure-logic-apps

Вопрос:

Используя приложения Azure Logic, я пытаюсь преобразовать массив JSON в объект JSON. Например, если у меня есть массив в виде:

 [
  {
    name: 'john'
    id: '1'
  },
  {
    name: 'sarah'
    id: '2'
  },
]
  

Я хотел бы иметь в качестве выходных данных:

 {
'1': 'john',
'2': 'sarah'
}
  

Комментарии:

1. Попробуйте использовать соединитель «Parse JSON» для анализа вашего массива JSON — [ { имя: ‘john’ id: ‘1’}, { имя: ‘sarah’ id: ‘2’}, ]. Инициализируйте пустую ([]) переменную типа «Массив» с именем «x». Затем используйте соединитель «Для каждого» в сгенерированном «выводе Parse JSON». Внутри foreach используйте «Добавить к переменной массива» на «x», чтобы добавить свой пользовательский вывод — {‘1’: ‘john’, ‘2’: ‘sarah’}. Дайте мне знать, если это сработает.

Ответ №1:

Первый результат инициализации Json:

введите описание изображения здесь

Затем в foreach lopp (testArray — это наш массив с данными) добавьте compose с выражением "addProperty(variables('JsonResult'),item()?['id'],item()?['name'])" и установите переменную с выводом из compose:

введите описание изображения здесь

Пример запуска: введите описание изображения здесь
введите описание изображения здесь

Код для LA:

 {
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "For_each": {
                "actions": {
                    "Add_property": {
                        "inputs": "@addProperty(variables('JsonResult'),item()?['id'],item()?['name'])",
                        "runAfter": {},
                        "type": "Compose"
                    },
                    "Set_variable": {
                        "inputs": {
                            "name": "JsonResult",
                            "value": "@outputs('Add_property')"
                        },
                        "runAfter": {
                            "Add_property": [
                                "Succeeded"
                            ]
                        },
                        "type": "SetVariable"
                    }
                },
                "foreach": "@variables('TestArray')",
                "runAfter": {
                    "Init_Json_Result": [
                        "Succeeded"
                    ]
                },
                "runtimeConfiguration": {
                    "concurrency": {
                        "repetitions": 1
                    }
                },
                "type": "Foreach"
            },
            "Init_Array": {
                "inputs": {
                    "variables": [
                        {
                            "name": "TestArray",
                            "type": "array",
                            "value": [
                                {
                                    "id": "1",
                                    "name": "john"
                                },
                                {
                                    "id": "2",
                                    "name": "sarah"
                                }
                            ]
                        }
                    ]
                },
                "runAfter": {},
                "type": "InitializeVariable"
            },
            "Init_Json_Result": {
                "inputs": {
                    "variables": [
                        {
                            "name": "JsonResult",
                            "type": "object",
                            "value": {}
                        }
                    ]
                },
                "runAfter": {
                    "Init_Array": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "Test_result": {
                "inputs": "@variables('JsonResult')",
                "runAfter": {
                    "For_each": [
                        "Succeeded"
                    ]
                },
                "type": "Compose"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {},
        "triggers": {
            "manual": {
                "inputs": {
                    "schema": {}
                },
                "kind": "Http",
                "type": "Request"
            }
        }
    },
    "parameters": {}
}
  

Комментарии:

1. Отлично, это то, что мне нужно

Ответ №2:

Как упоминалось в комментариях выше, публикуя это как ответ. Для достижения этой цели вы можете выполнить следующие шаги:

  1. Просто для тестирования потока добавьте инициализировать переменную action: введите описание изображения здесь

  2. Проанализировать входной массив: введите описание изображения здесь

  3. Затем инициализируйте пустую переменную массива: введите описание изображения здесь

  4. Затем используйте для каждого элемента управления, а внутри него вы можете использовать действие Добавить к переменной массива: введите описание изображения здесь

Теперь вы можете использовать output переменную, которая содержит ваш результирующий массив.

Проверенный результат:
введите описание изображения здесь

JSON-код для этого приложения Logic:

 {
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "For_each": {
                "actions": {
                    "Append_to_array_variable": {
                        "inputs": {
                            "name": "output",
                            "value": {
                                "@{items('For_each')['id']}": "@{items('For_each')['name']}"
                            }
                        },
                        "runAfter": {},
                        "type": "AppendToArrayVariable"
                    }
                },
                "foreach": "@body('Parse_JSON')",
                "runAfter": {
                    "Initialize_variable": [
                        "Succeeded"
                    ]
                },
                "type": "Foreach"
            },
            "HTTP": {
                "inputs": {
                    "body": "@variables('output')",
                    "method": "POST",
                    "uri": "https://prod-33.westeurope.logic.azure.com:443/workflows/a656267dd18d46d2aa21e79e4012ba29/triggers/manual/paths/invoke?api-version=2016-10-01amp;sp=/triggers/manual/runamp;sv=1.0amp;sig=eBgZCaKgCDWiMWjm7JGNNb1-QyXbnT5AlVgBQt1GF48"
                },
                "runAfter": {
                    "For_each": [
                        "Succeeded"
                    ]
                },
                "type": "Http"
            },
            "Initialize_variable": {
                "inputs": {
                    "variables": [
                        {
                            "name": "output",
                            "type": "array",
                            "value": []
                        }
                    ]
                },
                "runAfter": {
                    "Parse_JSON": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "Initialize_variable_2": {
                "inputs": {
                    "variables": [
                        {
                            "name": "input",
                            "type": "array",
                            "value": [
                                {
                                    "id": "1",
                                    "name": "john"
                                },
                                {
                                    "id": "2",
                                    "name": "sarah"
                                }
                            ]
                        }
                    ]
                },
                "runAfter": {},
                "type": "InitializeVariable"
            },
            "Parse_JSON": {
                "inputs": {
                    "content": "@variables('input')",
                    "schema": {
                        "items": {
                            "properties": {
                                "id": {
                                    "type": "string"
                                },
                                "name": {
                                    "type": "string"
                                }
                            },
                            "required": [
                                "name",
                                "id"
                            ],
                            "type": "object"
                        },
                        "type": "array"
                    }
                },
                "runAfter": {
                    "Initialize_variable_2": [
                        "Succeeded"
                    ]
                },
                "type": "ParseJson"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {},
        "triggers": {
            "manual": {
                "inputs": {
                    "schema": {}
                },
                "kind": "Http",
                "type": "Request"
            }
        }
    },
    "parameters": {}
}
  

Комментарии:

1. на выходе будет объект, а не массив, хотя

2. Вывод — это переменная массива, и она будет содержать массив этих пользовательских объектов.

3. Я также обновил фрагменты, которые показывают значение выходной переменной.