【问题标题】:Skipping else part in dataweave 2.0在 dataweave 2.0 中跳过其他部分
【发布时间】:2020-12-19 01:11:00
【问题描述】:

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

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

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

那么,有什么方法可以跳过其他部分。我试过这个-

if(condition)(

)else{}

OR

if(condition)(

)else""

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

【问题讨论】:

    标签: dataweave mule4


    【解决方案1】:

    您可以让 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 {}
    )
    

    BTW 需要使用++ 来组合对象

    【讨论】:

      【解决方案2】:

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

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

      根据您的表达,您可以执行以下操作:

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

      我不确定这是否会起作用,除非您的输出目标是变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-05
        相关资源
        最近更新 更多