Dataweave 用 do 代替 using

Dataweave replace using with do

我有一个场景,我试图从有效负载中删除 null 和空对象并找到以下函数,但我知道 "using" 被 "do" 取代。我可以知道它长什么样吗:

这是代码

%dw 2.0
fun filterValue(value) = value match {
    case is Object -> filterKeyValuePairs(value)
    case is Array -> $ map filterValue($) filter (not (isEmpty($)))
    else -> value
}
fun filterKeyValuePairs(value) = value mapObject (value, key, index) ->
using (filteredValue = filterValue(value)){
    ((key): filteredValue) if (not isEmpty(filteredValue))
}

---
filterValue(payload)

与do相同的代码;做基本上给你 header --- body

%dw 2.0
fun filterValue(value) = value match {
    case is Object -> filterKeyValuePairs(value)
    case is Array -> $ map filterValue($) filter (not (isEmpty($)))
    else -> value
}
fun filterKeyValuePairs(value) = value mapObject (value, key, index) -> do {
    var filteredValue = filterValue(value)
    ---
    ((key): filteredValue) if (not isEmpty(filteredValue))
}
---
filterValue(payload)

如果你想在没有第二个功能的情况下做到这一点:

%dw 2.0
fun filterValue(value) = value match {
    case is Object -> $ mapObject do {
        var filteredVal = filterValue($)
        ---
        (($$): filteredVal) if (not (isEmpty(filteredVal)))
    }
    case is Array -> $ map filterValue($) filter (not (isEmpty($)))
    else -> value
}
---
filterValue(payload)

你也可以考虑稍微改变一下,把你的过滤器当作一个函数,这样你就可以过滤空值以外的东西:

fun filterObjectAndArrays(value, fn: (v: Any) -> Boolean) = value match {
    case is Object -> $ mapObject do {
        var filteredVal = filterObjectAndArrays($, fn)
        ---
        (($$): filteredVal) if (fn(filteredVal))
    }
    case is Array -> $ map filterObjectAndArrays($, fn) filter (fn($))
    else -> value
}
---
//payload filterObjectAndArrays (not isEmpty($))
payload filterObjectAndArrays ($ != "a")

您尝试使用 skipOnNull 了吗?它还会删除空对象:

Check this out

skipNullOn

Skips null values in the specified data structure. By default, it does not skip the values. Valid values are elements, attributes, or everywhere.

arrays
Ignore and omit null values from JSON output, for example, output application/json skipNullOn="arrays".

objects+ Ignore an object that has a null value. The output contains an empty object ({}) instead of the object with the null value, for example, output application/json skipNullOn="objects".

everywhere
Apply skipNullOn to arrays and objects, for example, output application/json skipNullOn="everywhere"