Как получить доступ к значению массива через синтаксис выражения в приложении логики - PullRequest
0 голосов
/ 12 июня 2019

У меня есть приложение логики, с которым я работаю в Azure, где мне нужно получить доступ к определенному вложенному значению из некоторого JSON в Http Trigger.

Мне нужно получить доступ к пороговому значению (5) и значению второго элемента в массиве измерений (accountscontacts-account-delete) и динамически отобразить их с помощью синтаксиса Expression в редакторе приложения логики, но не могу 'не могу понять, где я ошибаюсь с моим выражением.

Я пытаюсь использовать этот синтаксис для доступа к пороговому значению,

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

и я 'Я пытаюсь использовать это выражение для доступа ко второму значению измерения,

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

Кажется, что ни один из них не работает, и я не могу понять, где мой синтаксис выражения идет не так,Он выдает эту ошибку, когда я пытаюсь оценить, что логика значений измерений (пороговая логика также завершается схожей ошибкой)

InvalidTemplate.Невозможно обработать выражения языка шаблонов во входных данных действия 'Post_message' в строке '1' и столбце '1660': 'Выражение языка шаблонов' last (first ('allOf')?? ['Dimension'])? ['Value']'не может быть оценено, потому что нельзя выбрать свойство' измерения '.Выбор свойства не поддерживается для значений типа '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 Ответ

2 голосов
/ 12 июня 2019

Есть две вещи, о которых нужно заботиться.Один из них - body из When a HTTP request is received в строковом формате, он не поддерживает свойство select, поэтому вы получаете сообщение об ошибке.

Второй - ваши данные Json включают в себя данные массива, поэтому при выборе данныхвам нужно добавить индекс.

Таким образом, решение сначала разбирает ваши данные в json с помощью действия Parse 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'].

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...