DataWeave和区分大小写

时间:2019-01-11 17:09:51

标签: mule

我可以在DataWeave中关闭区分大小写吗?

两个不同的请求正在返回响应,其中第一个包含一个称为CDATA的节点,另一个包含一个称为CData的节点。在DataWeave中,有一种方法可以将它们视为相等,或者我是否需要使用单独的代码语句,例如有效负载.Data.CDATA和有效负载.Data.CData?如果事情不区分大小写,那么我可以有一条语句,例如payload.data.cdata。

预先感谢, 特里

看来我需要两个不同的陈述。

payload.Data。* CDATA映射$。@ SeqId当有效载荷。数据?和payload.Data.CDATA?和payload.Data.CDATA。@ SeqId?

payload.Data。* CData映射$。@ SeqId当有效载荷。数据?和payload.Data.CData?和payload.Data.CData。@ SeqId?

1 个答案:

答案 0 :(得分:1)

否,但是您可以创建类似以下的函数来选择忽略大小写。

通过给定键(mapObject使用lower比较键)过滤对象,然后从生成的对象(使用pluck)中获取值。

%function selectIgnoreCase(obj, keyName) 
  obj mapObject ((v, k) -> k match {
    x when (lower x) == keyName -> {(k): v},
    default -> {}
  }) pluck $

您将像这样使用它:

selectIgnoreCase(payload.Data, "cdata")

注意:使用Mule 4(和DW 2)的语法会更好一些。