ule子转换消息将对象列表从数组移到对象

时间:2018-09-18 05:01:17

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

M子转换消息:

%dw 1.0 
%function removeEmptyInArray(arr) arr map (
    (removeEmptyInArray($) when $ is :array 
    otherwise (removeEmptyInObject($) when $ is :object
    otherwise $ when ($ != null and (sizeOf $) > 0) otherwise null))
) when arr != [] 
otherwise null
%function removeEmptyInObject(obj) obj mapObject (
    '$$': (removeEmptyInArray($) when $ is :array 
    otherwise (removeEmptyInObject($) when $ is :object
    otherwise $ when ($ != null and (sizeOf $) > 0) otherwise null))
)

%output application/json skipNullOn="everywhere"  , encoding='UTF-8'
%namespace ns0 http://xxxxx
%namespace ns1 http://xxxxx

%function getKey(key) (capitalize key) replace /\s/ with '' replace /Tns:/ with '' replace /tns:/ with ''  
%function convert(obj) obj mapObject {
     (getKey($$)) : convert($) when ($ is :object) otherwise $
} 

---
{
    "Header": {
        "H1": {
            "ID": sessionVars.ID ,
                "UID": sessionVars.UID

        }
    },
       "Body": removeEmptyInObject(convert(payload))

}

回复:

第一反应:

"Details": [{
                        "A": {
                            "A1": {
                                "A11": ""
                            },
                            "A2": {

                            }
                            "A3": ""

                        }
                    },
                    {
                        "B": {
                            "B1": {
                                "B11": ""
                            },
                            "B2": ""

                        }
                    }]

第二响应:

"Details": {
                    "A": {
                        "A1": {
                            "A11": ""
                        },
                        "A2": ""
                    }
                }

这两个响应来自不同的人,因此响应可以非常基于ID。

但是我需要每次响应都应以不像Array []的对象的形式出现,并且我也不能对整个有效负载进行硬编码,因为可以根据请求更改有效负载。

第一种请求的预期响应:

“详细信息”:                         “一种”: {                             “ A1”:{                                 “ A11”:“”                             },                             “ A2”:{

                        }
                        "A3": ""

                    }
                },
                {
                    "B": {
                        "B1": {
                            "B11": ""
                        },
                        "B2": ""

                    }
                }

1 个答案:

答案 0 :(得分:0)

如果您只是想参加:

{
  "Details": [
    {
      "A1": {}
    },
    {
      "A2": {}
    }
  ]
}

并将其变成:

{
  "Details": {
    "A1": {},
    "A2": {}
  }
}

换句话说,“减少”对象的数组:您可以使用reduce

payload.Details reduce ((detail, obj={}) ->
  obj ++ detail
)

或者您可以使用速记:

payload.Details reduce $$ ++ $

here对此进行了详细说明。