Mule Dataweave将Null替换为特定值

时间:2019-09-18 14:40:41

标签: mule mule-component anypoint-studio dataweave mule-esb

我的请求有效负载如下所示:

{
    "AllCodes": [
        {
            "Code1": "ABC"
        },
        {
            "Code2": "TUV"
        },
        {
            "Code3": "XYZ"
        }
    ]
}

我有一个函数,可以将上述值替换为某个值。我现在的代码如下:

%dw 1.0
%output application/json
%function LookUp(codes) codes mapObject {($$): $.code} //function to return string values for above codes
%var codeLookup = LookUp(sessionVars.OutputCodes)
%var FinalCodes = payload.AllCodes map codeLookup[$] joinBy ';' 
--
FinalCodes

sessionVars.OutputCodes的输出是:

{
  "CodeMaster": {
    "PrimaryCodes": {
      "PrimarySpecCodes": {
        "ABC": {
          "code": "ABC-String1"
        },
        "TUV": {
          "code": "TUV-String2"
        }
      }
    }
  }
}

我期望的输出是:

"ABC-String1;XYZ-String2;XYZ"

从上面可以看到,由于该函数仅返回“ ABC”和“ TUV”代码的值,因此如果没有找到函数值,我的最终输出应该具有原始值。

我试图在地图运算符之前使用默认值。但这似乎不起作用。

2 个答案:

答案 0 :(得分:2)

我们用allCodes获得$ pluck $的所有值,然后如果未找到codes[$],则默认为值$。我相信您只需将default $添加到原始数据编织中即可正常工作,但是我为StackOverflow上的其他用户提供了完整的解决方案。

%dw 1.0
%output application/json
%var outputCodes = 
{
    "CodeMaster": {
        "PrimaryCodes": {
            "PrimarySpecCodes": {
                "ABC": {
                    "code": "ABC-String1"
                },
                "TUV": {
                    "code": "TUV-String2"
                }
            }
        }
    }
}

%var allCodes = 
{
    "AllCodes": [
        {
            "Code1": "ABC"
        },
        {
            "Code2": "TUV"
        },
        {
            "Code3": "XYZ"
        }
    ]
}
%var codes = outputCodes.CodeMaster.PrimaryCodes.PrimarySpecCodes mapObject {
    ($$): $.code
}

---
(flatten (allCodes.AllCodes map ($ pluck $))) map (
    codes[$] default $
) joinBy ';'

这将产生:

"ABC-String1;TUV-String2;XYZ"

答案 1 :(得分:1)

有多种解决方法。一种可能如下:

%dw 1.0
%output application/json
%var payload2= { "CodeMaster": { "PrimaryCodes": { "PrimarySpecCodes": { "ABC": {"code": "ABC-String1"}, "TUV": {"code": "TUV-String2"} } } } }

%var codes =  payload2.CodeMaster.PrimaryCodes.PrimarySpecCodes mapObject {
    ($$) : $.code
}
%var finalCodes = (payload.AllCodes map {
    a: $  mapObject {
          a1: codes[$] default $
     }
}.a.a1) joinBy ";"
---
finalCodes