在 Dataweave 中忽略 JSON 中缺失的数组对象

Ignore missing array objects from JSON in Dataweave

我正在使用 Anypoint Studio 6.1 和 Mule 3.8.1,并且正在 Dataweave 中将 JSON 映射到 JSON。在 JSON 映射中,我有一个名为 "Channels" 的可选字段,其中包含一个字符串列表。当该字段不存在时,我会在 Dataweave 中收到警告。我如何编写 Dataweave 代码以在其为 null 时忽略?

数据编织代码:

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

我试过使用 "when" 和“?”选择器修饰符但语法不正确。

谢谢

您使用 when? 运算符是正确的。您只需要使用括号来确保它们适用于正确的事物。请注意,在您的示例中,我使用 $ 作为 shorthand 作为 payload01 参数。

%dw 1.0
%output application/json

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

如果您不需要在每个项目的 Channels 数组上使用 map,您可以只允许 null 通过:

payload map {
    Channels: $.Channels
}

对于不包含 Channels 字段的输入对象,这将产生以下结果:

{
    Channels: null
}

添加括号允许我们使用 when 来确定是否应该输出整个 key/value 对(又名元组):

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

产量:

{
}