繁体   English   中英

Azure Logic 应用访问 json 属性取决于值

[英]Azure Logic app access json property depending on value

我正在尝试从 api 获取评论列表。 这给了我一个带有嵌套属性的 JSON。 我设法从嵌套数组 ["value"]["answers"]["value"] 中获取几乎所有我需要的数据,因为有时数组 ["answers"] 有一个项目(“id”是“货物”、“交付”或“服务”),或其中 2 个或全部 3 个。 所以我不能用索引来得到我想要的。 我需要能够检查“id”并将“值”附加到我的数组中。 有没有办法编写一个检查“id”的表达式,然后在我的数组中写入“值”?

JSON:

...
"surveyData": [
                {
                    "questionRef": "q1",
                    "type": "CORE_STAR_RATING",
                    "properties": {
                        "title": "How do you evaluate ...?"
                    },
                    "value": {
                        "stars": 5,
                        "notAnswered": false
                    },
                    "userDefinedId": "q1"
                },
                   
                    "userDefinedId": "q2-good"
                },
                {
                    "questionRef": "q3",
                    "type": "DIMENSIONS",
                    "properties": {
                        "title": "How do you evaluate on those criterias ?"
                    },
                    **"value": {
                        "answers": [
                            {
                                "id": "delivery",
                                "value": 4,
                                "userDefinedId": "delivery",
                                "name": "Delivery",
                                "firstLabel": "Nul",
                                "lastLabel": "Good"
                            },
                            {
                                "id": "goods",
                                "value": 5,
                                "userDefinedId": "goods",
                                "name": "Goods",
                                "firstLabel": "Nul",
                                "lastLabel": "Good"
                            },
                            {
                                "id": "service",
                                "value": 5,
                                "userDefinedId": "service",
                                "name": "Service",
                                "firstLabel": "Nul",
                                "lastLabel": "Good"
                            }
                        ]**
                    },
                    "userDefinedId": "q3-group"
                }
            ]
...

到目前为止我的数组:


  "value": {
            "Event": "@items('For_each-Service')?['event']?['type']",
            "Delivery": "", <= ??
            "Goods": "", <= ??
            "Service": "@items('For_each-Service')?['surveyData'][2]?['value']?['answers'][2]?['value']", <= doesn't work
            "comment": "@items('For_each-Service')?['reply']?['comment']",
            "order date": "@items('For_each-Service')?['transaction']?['date']",
            "date": "@items('For_each-Service')?['reply']?['createdAt']",
            "email": "@items('For_each-Service')?['customer']?['email']",
            "id review": "@items('For_each-Service')?['event']?['id']",
           "name client": "@items('For_each-Service')?['customer']?['fullName']",
           "status": "@items('For_each-Service')?['state']",
            "title": "@items('For_each-Service')?['title']" 
       }

谢谢

有几种方法可以给这只猫剥皮,有些方法比其他方法更有效。

就个人而言,我会采取以下方法。

我创建了一个流程,基本上,它所做的第一件事就是初始化一个变量,该变量包含您的Answers数组作为数据......

答案

下一步是初始化另一个将该数组存储为 XML 的变量...

XML

这是包含在...中的表达式

xml(json(concat('{ "root": { "answer": ', variables('Answers Array'), '}}')))

在下一步中,我基本上是通过构造一个对象来做你正在做的事情,只是这一次,值的选择有点复杂,这是 body 的定义......

目的

{
  "Delivery": @{first(xpath(xml(variables('XML')), '//id[contains(text(), "delivery")]/parent::answer/value/text()'))},
  "Goods": @{first(xpath(xml(variables('XML')), '//id[contains(text(), "goods")]/parent::answer/value/text()'))},
  "Service": @{first(xpath(xml(variables('XML')), '//id[contains(text(), "service")]/parent::answer/value/text()'))}
}

使用xpath方法查询数据集可以减少获得所需结果所需的步骤。

如果缺少一个元素,它将简单地返回为 null ...

结果

以下是实现您的要求的解决方法之一。 首先,我初始化了 Delivery、Goods 和 Service Counts 的 3 个变量。

在此处输入图像描述

然后使用Parse_JSON提取提供的 JSON 的内部值。

在此处输入图像描述

在下一步中,我将尝试使用带有body('Parse_JSON')?['value']?['answers']?[iterationIndexes('Until')]?['id']表达式的Switch操作来遍历 Id并在 until 循环中使用以下表达式设置变量。

body('Parse_JSON')?['value']?['answers']?[iterationIndexes('Until')]?['value']

在此处输入图像描述

最后你可以像下面一样添加到你的数组中

在此处输入图像描述

结果:

在此处输入图像描述

您可以使用下面的代码视图在您的逻辑应用程序中重现

{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Compose": {
                "inputs": {
                    "value": {
                        "answers": [
                            {
                                "firstLabel": "Nul",
                                "id": "goods",
                                "lastLabel": "Good",
                                "name": "Goods",
                                "userDefinedId": "goods",
                                "value": 4
                            },
                            {
                                "firstLabel": "Nul",
                                "id": "service",
                                "lastLabel": "Good",
                                "name": "Service",
                                "userDefinedId": "service",
                                "value": 5
                            }
                        ]
                    }
                },
                "runAfter": {
                    "Initialize_variable_Service_Count": [
                        "Succeeded"
                    ]
                },
                "type": "Compose"
            },
            "Compose_2": {
                "inputs": " \"value\": {\n            \"Event\": \"@items('For_each-Service')?['event']?['type']\",\n            \"Delivery\": \"@{variables('Delivery Count')}\", \n            \"Goods\": \"@{variables('Goods Count')}\", \n            \"Service\": \"@{variables('Service Count')}\"\n       }",
                "runAfter": {
                    "Until": [
                        "Succeeded"
                    ]
                },
                "type": "Compose"
            },
            "Initialize_variable": {
                "inputs": {
                    "variables": [
                        {
                            "name": "i",
                            "type": "integer",
                            "value": 0
                        }
                    ]
                },
                "runAfter": {},
                "type": "InitializeVariable"
            },
            "Initialize_variable_Delivery_count": {
                "inputs": {
                    "variables": [
                        {
                            "name": "Delivery Count",
                            "type": "integer"
                        }
                    ]
                },
                "runAfter": {
                    "Initialize_variable": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "Initialize_variable_Goods_Count": {
                "inputs": {
                    "variables": [
                        {
                            "name": "Goods Count",
                            "type": "integer"
                        }
                    ]
                },
                "runAfter": {
                    "Initialize_variable_Delivery_count": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "Initialize_variable_Service_Count": {
                "inputs": {
                    "variables": [
                        {
                            "name": "Service Count",
                            "type": "integer"
                        }
                    ]
                },
                "runAfter": {
                    "Initialize_variable_Goods_Count": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "Parse_JSON": {
                "inputs": {
                    "content": "@outputs('Compose')",
                    "schema": {
                        "properties": {
                            "value": {
                                "properties": {
                                    "answers": {
                                        "items": {
                                            "properties": {
                                                "firstLabel": {
                                                    "type": "string"
                                                },
                                                "id": {
                                                    "type": "string"
                                                },
                                                "lastLabel": {
                                                    "type": "string"
                                                },
                                                "name": {
                                                    "type": "string"
                                                },
                                                "userDefinedId": {
                                                    "type": "string"
                                                },
                                                "value": {
                                                    "type": "integer"
                                                }
                                            },
                                            "required": [],
                                            "type": "object"
                                        },
                                        "type": "array"
                                    }
                                },
                                "type": "object"
                            }
                        },
                        "type": "object"
                    }
                },
                "runAfter": {
                    "Compose": [
                        "Succeeded"
                    ]
                },
                "type": "ParseJson"
            },
            "Until": {
                "actions": {
                    "Increment_variable": {
                        "inputs": {
                            "name": "i",
                            "value": 1
                        },
                        "runAfter": {
                            "Switch": [
                                "Succeeded"
                            ]
                        },
                        "type": "IncrementVariable"
                    },
                    "Switch": {
                        "cases": {
                            "Case_Delivery": {
                                "actions": {
                                    "Set_variable_Delivery_Count": {
                                        "inputs": {
                                            "name": "Delivery Count",
                                            "value": "@body('Parse_JSON')?['value']?['answers']?[iterationIndexes('Until')]?['value']"
                                        },
                                        "runAfter": {},
                                        "type": "SetVariable"
                                    }
                                },
                                "case": "delivery"
                            },
                            "Case_Goods": {
                                "actions": {
                                    "Set_variable_Goods_Count": {
                                        "inputs": {
                                            "name": "Goods Count",
                                            "value": "@body('Parse_JSON')?['value']?['answers']?[iterationIndexes('Until')]?['value']"
                                        },
                                        "runAfter": {},
                                        "type": "SetVariable"
                                    }
                                },
                                "case": "goods"
                            },
                            "Case_Service": {
                                "actions": {
                                    "Set_variable_Service_Count": {
                                        "inputs": {
                                            "name": "Service Count",
                                            "value": "@body('Parse_JSON')?['value']?['answers']?[iterationIndexes('Until')]?['value']"
                                        },
                                        "runAfter": {},
                                        "type": "SetVariable"
                                    }
                                },
                                "case": "service"
                            }
                        },
                        "default": {
                            "actions": {}
                        },
                        "expression": "@body('Parse_JSON')?['value']?['answers']?[iterationIndexes('Until')]?['id']",
                        "runAfter": {},
                        "type": "Switch"
                    }
                },
                "expression": "@equals(variables('i'), length(body('Parse_JSON')?['value']?['answers']))",
                "limit": {
                    "count": 10,
                    "timeout": "PT1H"
                },
                "runAfter": {
                    "Parse_JSON": [
                        "Succeeded"
                    ]
                },
                "type": "Until"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {},
        "triggers": {
            "manual": {
                "inputs": {
                    "schema": {}
                },
                "kind": "Http",
                "type": "Request"
            }
        }
    },
    "parameters": {}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM