跳过 dataweave 2.0 中的其他部分

Skipping else part in dataweave 2.0

我正在尝试将 groovy 代码转换为 DataWeave。我正在尝试根据条件将值存储在变量中。 伪代码为-

payload map (value, index) -> (
  if(condition) (
    vars.variableName + {
    "attribute1": "value1",
    "attribute2": "value2",
    "attribute3": "value3"
    }
  )
)

如您所见,我不想使用 else 部分。但在 DW else 部分是强制性的。

所以,有什么办法可以跳过else部分。我试过了-

if(condition)(

)else{}

OR

if(condition)(

)else""

但这会在变量中添加额外的 "" 或 {}

您可以让 else 成为预先存在的变量而不向其添加任何内容(需要在此脚本之前初始化)。

payload map (value, index) -> (
  if(condition) (
    vars.variableName ++ {
    "attribute1": "value1",
    "attribute2": "value2",
    "attribute3": "value3"
    }
  )
  else vars.variableName
)

或者,如果 vars.variableName 尚未创建,您可以将其默认为空对象,以便稍后在另一个脚本中添加。但是,如果变量尚未初始化,if-else 中的条件必须将处理指向 else 子句。否则,如果尝试将对象附加到 null.

的变量,将会出现错误
payload map (value, index) -> (
  if(condition) (
    vars.variableName ++ {
    "attribute1": "value1",
    "attribute2": "value2",
    "attribute3": "value3"
    }
  )
  else vars.variableName default {}
)

顺便说一句,需要使用++来组合对象

也许您需要添加一个输入和一个相应的输出,以便我们可以提供帮助more/better。

现在回答您的问题:DW if-expression 只是一个表达式,它必须 return 一个值,因此 else 必须在那里。

根据你的表情,你可以这样做:

if (condition) (
  vars.variableName + {attribute1: "value1"}
) else (
  vars.variableName
)

我不确定这是否有效,除非你的输出目标是变量。