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": ""
}
}
答案 0 :(得分:0)
如果您只是想参加:
{
"Details": [
{
"A1": {}
},
{
"A2": {}
}
]
}
并将其变成:
{
"Details": {
"A1": {},
"A2": {}
}
}
换句话说,“减少”对象的数组:您可以使用reduce
:
payload.Details reduce ((detail, obj={}) ->
obj ++ detail
)
或者您可以使用速记:
payload.Details reduce $$ ++ $
here对此进行了详细说明。