Как проверить, существует ли ключ в полезной нагрузке, и использовать его в условии выбора - PullRequest
0 голосов
/ 24 марта 2020

Я хочу проверить, существует ли ключ в первом элементе (объекте) массива.

Когда я пишу следующее:

flowVars.payloadStored[0].data!=null

внутри условия when, Я получаю следующую ошибку:

Не удалось выполнить выражение 'flowVars.payloadStored [0] .data! = Null'. -> [Ошибка: нулевой указатель: flowVars.payloadStored [0] .data], [Near: {... flowVars.payloadStored [0] .data ....}], ^, [Строка: 1, Столбец: 1 ] -> ",

Даже при попытке

 flowVars.payloadStored[0].['data']!=null 

Я все еще получаю сообщение об ошибке:

[Error: unterminated string literal],[Near : {... flowVars.payloadStored[0].['data']!=null ....}],                                               ^,[Line: 1, Column: 35]"

Любые подсказки, как это сделать?

1 Ответ

1 голос
/ 25 марта 2020

Соблазнительно делать все сопоставления в одной строке, но на самом деле вы делаете цепочку ссылок. Вы должны быть уверены, что каждая ссылка в цепочке существует.

Основываясь на сообщении, я предполагаю, что payloadStored может не существовать или не является массивом или не имеет элементов в массиве. Для ссылки на первый элемент в массиве вы должны быть уверены, что все верно. Таким образом, правильное преобразование DW не является элегантным, но пуленепробиваемый должен выглядеть так, чтобы убедиться, что у вас не будет исключение нулевого указателя:

%dw 1.0
%output application/json
---
{
    data: flowVars.payloadStored[0].['data']
} when flowVars.payloadStored is :array and sizeOf (flowVars.payloadStored) > 0
otherwise
{
    data: "Not Available"
}

Таким образом, ваш лог c должен выглядеть так:

flowVars.payloadStored is :array and sizeOf (flowVars.payloadStored) > 0 and flowVars.payloadStored[0].['data']!=null 

Пример здесь https://simpleflatservice.com/mule4/DoubleAndTripleCheckTheInput.html

...