问题描述
我有一个像下面这样的 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 版本吗??
解决方法
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"
}
}
}
}
,
这是将 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