覆盖 skipNullOn="everywhere"

override skipNullOn="everywhere"

我把我的dataweave脚本分成模块,我在主dwl中使用了skipNullOn="everywhere",所以所有模块中的所有空值都被跳过了。但是,我不想跳过特定模块的空值。我如何覆盖(取消)该特定模块的 skipNullOn="everywhere"。

输入:

<XML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ABC xsi:nil="true"/>
    <DEF/>
</XML>

数据编织代码:

%dw2.0
output application/json skipNullOn="everywhere"
---
payload.XML

预期输出( json):

{
"ABC": ""
}

获取输出(json):

{

}

你需要明确地为那个字段写逻辑,应该是这样的

%dw2.0
output application/json skipNullOn="everywhere"
---
{
"ABC": if (payload.XML.ABC_val !=null ) else ""
}

您可以尝试此解决方法,以获得预期的结果。使用两个dataweave

1st Dataweave(无论哪里出现“nil”,都需要更新语法,如下所示)

%dw 2.0
output application/xml skipNullOn="everywhere"

ns xsi http://www.w3.org/2001/XMLSchema-instance
---
{
ABC @( xsi#nil:"true"): payload.ABC ,
DEF : payload.DEF
}

第二个数据编织

 %dw 2.0
output application/json
---
payload

然后您可以轻松地将 null 替换为 ""。

由于回复的比较晚,不知道对你有没有帮助。无论如何,您可以在 属性 文件中以逗号分隔格式获得要跳过 'skipNullOn' 检查的节点列表。然后你尝试与我在下面类似的东西,这将帮助你遍历所有节点,然后实现你想要的输出:

%dw 2.0
output application/json skipNullOn="everywhere"
var toSkipNullOn='ABC,XYZ'

fun checkNull(key,val) = if((toSkipNullOn splitBy(',')) contains(key as String)) ''  else null
---
payload.XML mapObject (v0, k0, i0) -> 
{
    (k0):checkNull(k0,v0) 
}

在此示例中,我已将节点名称 (ABC、XYZ) 硬编码到变量 toSkipNullOn。相反,您必须从 属性 文件中读取它作为 p('key-name') 并将其分配给 toSkipNullOn.