问题描述
[
{
"Order" : "123","Product" : "456"
},{
"Order" : "","Product" : ""
}
]
输出应该是这样的,
[
{
"Order" : "123","Product" : "456"
}
]
解决方法
发布的解决方案都没有处理嵌套结构或数组之类的事情,所以我想我会在环中抛出这个递归解决方案。这允许我们遍历对象的整个结构,直到我们遇到第一个非空字段。
%dw 2.0
output application/json
import everyEntry from dw::core::Objects
import every from dw::core::Arrays
var allFieldsNull = (obj: Any) ->
obj match {
case is Object -> obj everyEntry (allFieldsNull($))
case is Array -> (sizeOf(obj) == 0) or (obj every allFieldsNull($))
//case is Array -> false
else -> isEmpty(obj)
}
---
payload filter !allFieldsNull($)
如果您想将一个空数组视为足以保留对象,因为它在技术上不是空的,您只需要注释掉 case is Array
行并取消对其下方的注释。
输入:
[
{
"Order" : "123","Product" : "456"
},{
"Order" : "","Product" : "","Address": {
"Field1": ""
},"Test": [
{
"Order" : "","Address": {
"Field1": ""
}
}
]
},{
"Order" : null,"Product" : null,"Address": {
"Field1": null
},"Test": [
{
"Order" : null,"Address": {
"Field1": "A value even in a deeply nested field means I show up"
}
}
]
}
]
输出:
[
{
"Order": "123","Product": "456"
},{
"Order": null,"Product": null,"Address": {
"Field1": null
},"Test": [
{
"Order": null,"Address": {
"Field1": "A value even in a deeply nested field means I show up"
}
}
]
}
]
,
您可以按条件过滤,使用 everyEntry() 函数查看并非所有值都为空。
%dw 2.0
output application/json
import * from dw::core::Objects
---
payload filter ($ someEntry (value,key) -> !isEmpty(value))
,
这样的事情对你有用吗?
输入
[
{
"Order" : "123","Product" : null
}
]
脚本
%dw 2.0
output application/json
import * from dw::core::Objects
var valuesOfInputObjects = payload map { ($ takeWhile((value,key) -> value == null))}
---
payload -- valuesOfInputObjects
输出
[
{
"Order": "123","Product": "456"
}
]