覆盖skipNullOn =“无处不在”

问题描述

我已将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。enter image description here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...