mule - Mule ESB dataweave 如何忽略 null
问题描述
在 mule ESB dataweave 中,我无法忽略空对象,{}
. 我正在尝试检查我的输入中是否存在特定表。如果存在,我做一些业务逻辑,如果不存在,就不应该包含在输出中。但是,我得到{}
的不是什么。
这是我的输入文件:
{
"srcTable": {
"srcList": [
{
"tableNames": "table1",
"src": [
{
"srcKey": [
{
"key": "date",
"value": "01/01/2016"
},
{
"key": "withinYearTotalMaxSection",
"value": "2500"
},
{
"key": "previousClaimsTotalMaxSection",
"value": "25000"
},
{
"key": "previousClaimsTotalMax",
"value": "50000"
}
]
}
]
},
{
"tableNames": "table2",
"src": [
{
"srcKey": [
{
"key": "date",
"value": "01/01/2016"
},
{
"key": "type",
"value": "A"
},
{
"key": "garden",
"value": "1000"
},
{
"key": "risk",
"value": "50000"
}
]
},
{
"srcKey": [
{
"key": "date",
"value": "01/01/2016"
},
{
"key": "type",
"value": "B"
},
{
"key": "garden",
"value": "0"
},
{
"key": "risk",
"value": "50000"
}
]
}
]
},
{
"tableNames": "table3",
"src": [
{
"srcKey": [
{
"key": "date",
"value": "01/01/2016"
},
{
"key": "type",
"value": "GLD"
},
{
"key": "plants",
"value": "1500"
},
{
"key": "theft",
"value": "3000"
}
]
},
{
"srcKey": [
{
"key": "date",
"value": "01/01/2016"
},
{
"key": "type",
"value": "SVR"
},
{
"key": "plants",
"value": "0"
},
{
"key": "theft",
"value": "1000"
}
]
}
]
}
]
}
}
这是我的数据编织:
%dw 1.0
%output application/json skipNullOn="everything"
---
{
singlevalue: [
{
(payload.srcTable.srcList filter ($.tableNames == 'table1') map (r,pos)-> {
(r.src map {
($.srcKey filter ($.key == 'date') map {
name: 'date',
value: $.value
})
})
})
},
{
(payload.srcTable.srcList filter ($.tableNames != null and $.tableNames == 'xxx') map (r,pos)-> {
(r.src map {
($.srcKey filter ($.key == 'date') map {
name: 'date' when $.value != null otherwise null,
value: $.value
})
})
})
}
]
}
这个输出文件:
{
"singlevalue": [
{
"name": "date",
"value": "01/01/2016"
},
{}
]
}
任何人都可以建议如何摆脱空物体{}
,好吗?
谢谢和问候NK
解决方案
最简单的做法是在末尾删除所有空元素,如下所示:
%dw 1.0
%output application/json skipNullOn="everything"
%var transformation = [
{
(payload.srcTable.srcList filter ($.tableNames == 'table1') map (r,pos)-> {
(r.src map {
($.srcKey filter ($.key == 'date') map {
name: 'date',
value: $.value
})
})
})
},
{
(payload.srcTable.srcList filter ($.tableNames != null and $.tableNames == 'xxx') map (r,pos)-> {
(r.src map {
($.srcKey filter ($.key == 'date') map {
name: 'date' when $.value != null otherwise null,
value: $.value
})
})
})
}
]
%function removeEmptyObjects(e)
e filter $ != {}
---
{ singleValue: removeEmptyObjects(transformation) }
这输出:
{
"singleValue": [
{
"name": "date",
"value": "01/01/2016"
}
]
}
推荐阅读
- angular - 如何将登陆页面实现到材质角度的 Web 应用程序中
- sql - 根据范围拆分记录
- python - 使用上下文管理器模拟打开并获取打开的参数
- share - 将私有托管区域关联到另一个帐户,(NotAuthorizedException)(退出状态 255)
- pandas - 如何最好地加入/合并列上的两个熊猫数据框(pandas.core.series.Series 和 pandas.core.frame.DataFrame)
- javascript - Vue没有应用样式类
- r - 关于 R 代码与舍入素数有关的问题
- php - symfony 3.4“驱动程序发生异常:SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo失败:名称或服务未知”
- c# - 并行运行测试和切换 iframe 时如何防止测试失败?
- c# - System.ArgumentNullException: '值不能为空。参数名称:key'