问题描述
我已将dataweave脚本划分为模块,并且在主dwl中使用了skipNullOn="everywhere"
,因此所有模块中的所有空值都将被跳过。但是,我不想跳过特定模块的空值。如何为该特定模块覆盖(nullify)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
第一个Dataweave (无论何时获得“ nil”,语法都需要更新为以下形式)
running_function_mstash <-
function(stat_to_do = c("min","max","mean","sum"),painful_size = 1e4) {
stat_to_do <- match.arg(stat_to_do)
painful_size <<- painful_size
stash(var = "M_pain",code = {
painful_function(n = painful_size)
},depends_on = "painful_size")
do.call(stat_to_do,list(M_pain))
}
running_function_mstash(stat_to_do = "min",painful_size = 1e6)
#Stashing object.
#[1] 1e+06
第二个Dataweave
%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
}
然后您可以轻松地将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')
并将其分配给SkipNullOn。