我从CSV映射到JSON,并且一些CSV字段在JSON映射中显示为“”。如何让Dataweave忽略“”并仅在有值时填充?
我尝试过skipNullOn,但这不起作用。有没有其他方法可以做到这一点,还是我必须在每个字段周围添加一个when条件?
使用递归解决方案查看此错误:
由于
答案 0 :(得分:1)
这是我构建的示例逻辑(猜测,这是你正在寻找的)。如果它不起作用,请给我一个示例CSV和您期望的输出JSON格式,我将尝试为您提供逻辑。
示例CSV输入(第3行和第4行中缺少其中一个值)
header1,header2
1,value1
2,value2
3,
,value4
<强> Dataweave 强>
%dw 1.0
%output application/json
---
payload map {
("headerValue1": $.header1) when $.header1 != '',
("headerValue2": $.header2) when $.header2 != ''
}
<强>结果强>
[
{
"headerValue1": "1",
"headerValue2": "value1"
},
{
"headerValue1": "2",
"headerValue2": "value2"
},
{
"headerValue1": "3"
},
{
"headerValue2": "value4"
}
]
答案 1 :(得分:1)
考虑到您有四个字段,并且您想跳过城市字段(如果为null或为空),您还可以将dataweave脚本修改为:
%dw 1.0
{ person:payload map((payload01,indexOfPayload01) - &gt; { firstname:payload01.fname, lastname:payload01.lname, 地址:payload01.address, (city:payload01.city)当payload01.city!= null和payload01.city!=&#39;&#39; }) }
答案 2 :(得分:1)
尝试使用this answer改编的此解决方案。我们递归地决定是否要从模型中删除字段,使用acceptable
函数中的match来删除空字符串,空值和空对象。
%dw 1.0
%output application/json
%function acceptable(value) (
value match {
:null -> false,
o is :object -> o != {},
s is :string -> s != "",
default -> true
}
)
%function filterKeyValue(key, value) (
{(key): value} when acceptable(value) otherwise {}
)
%function removeFields(x)
x match {
a is :array -> a map removeFields($),
o is :object -> o mapObject
(filterKeyValue($$, removeFields($))),
default -> $
}
---
removeFields(payload)