[Dataweave用do替换使用

问题描述 投票:0回答:2

我有一种情况,试图从有效负载中删除空对象和空对象,并找到以下功能,但是我知道,“ 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)
dataweave mulesoft
2个回答
2
投票

与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")

0
投票

您尝试使用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"
© www.soinside.com 2019 - 2024. All rights reserved.