如何根据 Mule(3) Dataweave 1.0 中的条件替换 Json 中的特定值

时间:2021-01-29 00:01:17

标签: mule mule-studio dataweave mule4

我有一个像下面这样的 Json 输入,如果 doa 为 null 或 "" 它需要替换为值 test 如果它包含 Value 那么不需要更改。我已经使用 update 在 dwl 2 版本中实现了。在 dataweave 1.0 版本中使用 mabObject,但它不起作用。寻找您的专业知识。谢谢

输入:

 {
    "sets": {
        "exd": {
            "cse": {
                "doa": null
            }
        }
    }
}

在 dwl 2 中实现:

%dw 2.0
output application/json skipNullOn="everywhere"
import * from dw::util::Values
---
 if 
 (!isEmpty (payload.sets.exd.cse.doa )) payload
 else
 payload  update
  {
    case .sets.exd.cse.doa! -> "test"
}
 

回复

     {
     "sets": {
        "exd": {
            "cse": {
                "doa": "test"
            }
        }
    }
}

正在寻找 Mule 3 dataweave 1.0 版本吗??

2 个答案:

答案 0 :(得分:0)

If / else 语句在 dataweave 1.0 中的工作方式大不相同,update 不存在,而且我不知道 isEmpty 是否作为核心的一部分存在 - 不要这么认为。如果你提前知道对象的结构,你可以像这样简单地构建一个新对象:

%dw 1.0
%input payload application/json
%output application/json
---
payload when (payload.sets.exd.cse.doa != '' and payload.sets.exd.cse.doa != null) 
otherwise {
  sets: {
    exd: {
      cse: {
        data: "test"
      }
    }
  }
}

答案 1 :(得分:0)

这是将 DataWeave 2.0 中的更新运算符作为函数向 DataWeave 1.0 的较小的反向移植。 keys 参数是作为字符串数组的键序列。我添加了对键 null 或空的检查,因为它可以在 DataWeave 1.0 中完成。

%dw 1.0
%output application/json
%function updateKey(o,keys,value)
    o match {
        :object -> o mapObject ($$): 
                    updateKey($, keys[1 to -1], value )
                        when ($$ ~= keys[0] and ((sizeOf keys) >1))
                        otherwise ($ 
                            when ((sizeOf keys) >1) otherwise value
                        ),
                                        
        default -> $ 
    }
---
updateKey(payload, ["sets", "exd", "cse", "doa"], "test") when (payload.sets.exd.cse.doa is :null or payload.sets.exd.cse.doa == "") otherwise payload
相关问题