如何通过逻辑应用中的表达式语法访问数组值

tok*_*709 7 json triggers azure azure-logic-apps

我有一个在 Azure 中使用的逻辑应用程序,我需要从 Http 触发器上的某些 JSON 访问某个嵌套值。

我需要访问阈值 (5) 和维度数组中第二项的值 (accountscontacts-account-deleted) 并通过逻辑应用编辑器中的表达式语法动态显示这些但无法弄清楚我在哪里我的表达有问题。

我正在尝试使用此语法来访问阈值,

first('allOf')?['threshold']

我正在尝试使用此表达式来访问第二维值,

last(first('allOf')?['dimensions'])?['value']

这些似乎都不起作用,我无法弄清楚我的 Expression 语法哪里出错了。当我尝试评估维度值逻辑时,它会抛出此错误(阈值逻辑也因类似错误而失败)

无效模板。无法在“1”行和“1660”列的“Post_message”输入中处理模板语言表达式:“模板语言表达式”last(first('allOf')?['dimensions'])?['value'] ' 无法计算,因为无法选择属性 'dimensions'。“字符串”类型的值不支持属性选择。请参阅https://aka.ms/logicexpressions了解使用详情。'。

JSON 有效负载

{
    "schemaId": "AzureMonitorMetricAlert",
    "data": {
        "version": "2.0",
        "properties": null,
        "status": "Deactivated",
        "context": {
            "timestamp": "2019-06-11T21:26:20.5035755Z",
            "id": "/URLTEXT/",
            "name": "FBIS Event Bus DLQ Threshold Notifier",
            "description": "",
            "conditionType": "SingleResourceMultipleMetricCriteria",
            "severity": "3",
            "condition": {
                "windowSize": "PT5M",
                "allOf": [
                    {
                        "metricName": "DeadletteredMessages",
                        "metricNamespace": "Microsoft.ServiceBus/namespaces",
                        "operator": "GreaterThan",
                        "threshold": "5",
                        "timeAggregation": "Average",
                        "dimensions": [
                            {
                                "name": "ResourceId",
                                "value": "123456:fbis-event-bus"
                            },
                            {
                                "name": "EntityName",
                                "value": "accountscontacts-account-deleted"
                            }
                        ],
                        "metricValue": 4
                    }
                ]
            },
            "subscriptionId": "1234",
            "resourceGroupName": "SharedResources",
            "resourceName": "FBIS-Event-Bus",
            "resourceType": "Microsoft.ServiceBus/namespaces",
            "resourceId": "/URLTEXT/",
            "portalLink": "PORTALLINK"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是带有表达式块的逻辑应用程序外观的快照(我想我也不确定我是否也正确访问了此处的属性),

表达式语法失败

知道如何使用表达式语法正确地动态访问这些属性吗?

Geo*_*hen 10

有两件事需要注意。一个是bodyWhen a HTTP request is received 是字符串格式,它不支持特定的属性,这就是为什么你的错误。

第二个是你的 Json 数据包含数组数据,所以当你选择数据时你需要添加索引。

所以解决方案是首先将您的数据解析为带有Parse JSON操作的json ,架构与When a HTTP request is received. 然后你就可以选择属性了。我测试了两个属性:thresholddimensions valuethreshold是这样的表达式:body('Parse_JSON')['data']['context']['condition']['allOf'][0]['threshold']dimensions value是这一个:body('Parse_JSON')['data']['context']['condition']['allOf'][0]['dimensions'][1]['value']

在此处输入图片说明

在此处输入图片说明