使用Dataweave将CSV映射到JSON时忽略空字符串

时间:2017-01-09 10:46:28

标签: json csv mule anypoint-studio dataweave

我从CSV映射到JSON,并且一些CSV字段在JSON映射中显示为“”。如何让Dataweave忽略“”并仅在有值时填充?

我尝试过skipNullOn,但这不起作用。有没有其他方法可以做到这一点,还是我必须在每个字段周围添加一个when条件?

使用递归解决方案查看此错误:

enter image description here

由于

3 个答案:

答案 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

%输出应用程序/ json

{     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)