Сообщение преобразования мула перемещает список объектов из массива в объекты - PullRequest
0 голосов
/ 18 сентября 2018

Сообщение преобразования Mule:

%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": ""
                    }
                }

Дваответ приходит для разных людей, поэтому ответ может основываться на идентификаторе.

Но мне нужно, чтобы каждый раз ответ приходил как объект, не похожий на Array [], и я также не могу жестко закодировать всю полезную нагрузку как полезную нагрузкуможет быть изменено в соответствии с запросом.

Ожидаемый ответ для первого типа запроса:

"Подробности": "A": {"A1": {"A11": ""},"A2": {

                        }
                        "A3": ""

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

                    }
                }

1 Ответ

0 голосов
/ 21 сентября 2018

Если вы просто хотите взять:

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

И превратить его в:

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

Другими словами, «уменьшить» массив до объекта: вы можете сделатьчто с reduce:

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

Или вы можете использовать сокращение:

payload.Details reduce $$ ++ $

Это подробно объясняется здесь .

...