如何检查有效负载中是否存在密钥并在选择条件中使用它

How to check if a key exists in the payload and use that in a choice condition

我想检查数组的第一个元素(对象)中是否存在键。

当我写下以下内容时:

flowVars.payloadStored[0].data!=null

在选择的 when 条件下,出现以下错误:

表达式 'flowVars.payloadStored[0].data!=null' 的执行失败。 -> [错误:空指针:flowVars.payloadStored[0].data],[附近:{... 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]"

任何线索,如何做到这一点?

在一行中完成所有映射很诱人,但实际上您正在做引用链。您应该确保链中的每个 link 确实存在。

根据消息我猜测 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"
}

所以你的逻辑应该是这样的:

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

示例在这里https://simpleflatservice.com/mule4/DoubleAndTripleCheckTheInput.html