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

Posted

技术标签:

【中文标题】如何通过逻辑应用中的表达式语法访问数组值【英文标题】:How do I access an array value through expression syntax in a logic app 【发布时间】:2019-10-26 09:49:21 【问题描述】:

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

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

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

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

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

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

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

无效的模板。无法在“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"
        
    

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

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

【问题讨论】:

【参考方案1】:

有两件事需要注意。一种是When a HTTP request is receivedbody 是字符串格式,它不支持选择属性,这就是您收到错误的原因。

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

【讨论】:

这太棒了,立即解决了我的问题。它也证实了我对数据格式的一些怀疑。感谢您的帮助。

以上是关于如何通过逻辑应用中的表达式语法访问数组值的主要内容,如果未能解决你的问题,请参考以下文章

编译器如何实现lambda表达式?

JSP 表达式语言

Python100天学习笔记Day24 JS基本语法

如何使用指针表达式访问 C 中的二维数组的元素?

访问表单 - 查询表达式中的语法错误(缺少运算符)

EL表达语言