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

时间:2019-06-11 23:10:44

标签: json azure triggers azure-logic-apps

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

我需要访问维度数组中的阈值(5)和第二项的值(accountscontacts-account-deleted),并在Logic App编辑器中通过Expression语法动态显示这些内容,但无法弄清楚我的表情出了问题。

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

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

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

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

这些似乎都不起作用,而且我不太清楚我的Expression语法出了什么问题。当我尝试评估尺寸值逻辑时,它将引发此错误(阈值逻辑也因类似的错误而失败)

  

InvalidTemplate。无法在行“ 1”和列“ 1660”的操作“ Post_message”输入中处理模板语言表达式:'模板语言表达式'last(first('allOf')?['dimensions'])?['value']无法评估',因为无法选择属性'dimensions'。类型'String'的值不支持属性选择。有关用法的详细信息,请参见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"
        }
    }
}

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

Expression Syntax Failure

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

1 个答案:

答案 0 :(得分:2)

有两件事要注意。一个是body中的When a HTTP request is received是字符串格式,它不支持select属性,这就是为什么您会收到错误消息。

第二个是您的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']

enter image description here

enter image description here