Игнорировать отсутствующие объекты массива из JSON в Dataweave

Я использую Anypoint Studio 6.1 и Mule 3.8.1 и сопоставляю JSON с JSON в Dataweave. В сопоставлении JSON у меня есть необязательное поле под названием «Каналы», которое содержит список строк. Когда поля нет, я получаю предупреждение в Dataweave. Как я могу написать код Dataweave, чтобы он игнорировал нулевое значение?

Код Dataweave:

%dw 1.0
%output application/json skipNullOn="everywhere"
---
payload map ((payload01 , indexOfPayload01) -> {
    Channels: payload01.Channels map ((channel , indexOfAccessChannel) -> channel)
})

Я пробовал использовать «когда», а также «?» селектор модификатора, но не может получить правильный синтаксис.

Спасибо


person user3165854    schedule 16.01.2017    source источник


Ответы (1)


Вы правильно использовали when и оператор ?. Вам просто нужно использовать круглые скобки, чтобы убедиться, что они применимы к правильным вещам. Обратите внимание, что я использую $ как сокращение для параметра payload01 в вашем примере.

%dw 1.0
%output application/json

---
payload map {
    (Channels: $.Channels map (lower $)) when $.Channels?
}

Если вам не нужно использовать map в массиве Channels внутри каждого элемента, вы можете просто позволить null пройти:

payload map {
    Channels: $.Channels
}

Это приведет к следующему для входных объектов, не содержащих поля Channels:

{
    Channels: null
}

Добавление круглых скобок позволяет нам использовать when, чтобы определить, должна ли выводиться вся пара ключ / значение (также известная как кортеж):

payload map {
    (Channels: $.Channels) when $.Channels?
}

Урожайность:

{
}
person Ryan Hoegg    schedule 16.01.2017