使用 Dataweave 将 CSV 映射到 JSON 时忽略空字符串
Ignore empty string when mapping CSV to JSON using Dataweave
我正在从 CSV 映射到 JSON,某些 CSV 字段在 JSON 映射中显示为“”。如何让 Dataweave 忽略“”并仅在有值时填充?
我试过 skipNullOn 但这不起作用。有没有其他方法可以做到这一点,还是我必须在每个字段周围添加 when 条件?
使用递归解决方案看到此错误:
谢谢
这是我构建的示例逻辑(猜猜,这就是您要找的)。如果它不起作用,请给我一个示例 CSV 和您期望的输出 JSON 格式,我会尝试为您获取逻辑。
Sample CSV Input (with one of the value missing in line 3 and 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 != ''
}
Result
[
{
"headerValue1": "1",
"headerValue2": "value1"
},
{
"headerValue1": "2",
"headerValue2": "value2"
},
{
"headerValue1": "3"
},
{
"headerValue2": "value4"
}
]
考虑到您有四个字段,如果城市字段为 null 或为空,您希望跳过 city 字段,您还可以将 dataweave 脚本修改为以下内容:
%dw 1.0
%输出application/json
{
人:有效载荷图((payload01,indexOfPayload01)-> {
名字:payload01.fname,
姓氏:payload01.lname,
地址:payload01.address,
(city: payload01.city) 当 payload01.city !=null 和 payload01.city !=''
})
}
尝试此解决方案,该解决方案改编自 acceptable
函数中的 . We recursively decide if we want to remove a field from the model, using 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)
我正在从 CSV 映射到 JSON,某些 CSV 字段在 JSON 映射中显示为“”。如何让 Dataweave 忽略“”并仅在有值时填充?
我试过 skipNullOn 但这不起作用。有没有其他方法可以做到这一点,还是我必须在每个字段周围添加 when 条件?
使用递归解决方案看到此错误:
谢谢
这是我构建的示例逻辑(猜猜,这就是您要找的)。如果它不起作用,请给我一个示例 CSV 和您期望的输出 JSON 格式,我会尝试为您获取逻辑。
Sample CSV Input (with one of the value missing in line 3 and 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 != ''
}
Result
[
{
"headerValue1": "1",
"headerValue2": "value1"
},
{
"headerValue1": "2",
"headerValue2": "value2"
},
{
"headerValue1": "3"
},
{
"headerValue2": "value4"
}
]
考虑到您有四个字段,如果城市字段为 null 或为空,您希望跳过 city 字段,您还可以将 dataweave 脚本修改为以下内容:
%dw 1.0
%输出application/json
{ 人:有效载荷图((payload01,indexOfPayload01)-> { 名字:payload01.fname, 姓氏:payload01.lname, 地址:payload01.address, (city: payload01.city) 当 payload01.city !=null 和 payload01.city !='' }) }
尝试此解决方案,该解决方案改编自 acceptable
函数中的
%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)