[英]How to replace specific value in Json based on condition in Mule(3) Dataweave 1.0
[英]Mule Dataweave Replace Null with Specific Value
我的請求有效負載如下所示:
{
"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”代碼的值,因此如果未找到函數值,則最終輸出應具有原始值。
我試圖在地圖運算符之前使用默認值。 但這似乎不起作用。
我們獲得$ pluck $
allCodes
$ pluck $
allCodes
所有值,然后,如果未找到codes[$]
,則默認為$
。 我相信您只需要在原始dataweave中添加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"
有多種解決方法。 一種可能如下:
%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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.