我有一个在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"
}
}
}
这是逻辑应用程序与表达式块的外观快照(我想我也不确定在这里是否也正确访问了属性)
您知道我如何使用表达式语法正确地动态访问这些属性吗?
答案 0 :(得分:2)
有两件事要注意。一个是body
中的When a HTTP request is received
是字符串格式,它不支持select属性,这就是为什么您会收到错误消息。
第二个是您的Json数据包含数组数据,因此,当您选择数据时,需要添加索引。
因此,解决方案是首先使用Parse JSON
动作将数据解析为json,该模式与When a HTTP request is received
相同。然后,您将能够选择属性。我测试了两个属性:threshold
和dimensions value
。 threshold
是这个表达式:body('Parse_JSON')['data']['context']['condition']['allOf'][0]['threshold']
,而dimensions value
是这个表达式:body('Parse_JSON')['data']['context']['condition']['allOf'][0]['dimensions'][1]['value']
。