Mule 将具有多个阵列的有效负载转换为单个阵列

Mule 将具有多个阵列的有效负载转换为单个阵列,mule,transformation,dataweave,Mule,Transformation,Dataweave,我有一个有效载荷,我正试图压平,但运气不太好。有效载荷如下所示: {payload= [xyz, [{creation: 1501535135, id: reference_1}, {creation: 225351535, id: reference_2 }] abc, [{creation: 129495124, id: reference_3

我有一个有效载荷,我正试图压平,但运气不太好。有效载荷如下所示:

    {payload=
        [xyz,
        [{creation: 1501535135,
          id: reference_1},
         {creation: 225351535,
          id: reference_2 }]
        abc,
        [{creation: 129495124,
          id: reference_3},
         {creation: 151352244,
          id: reference_4 }]
        [{creation: 1501535135,
          id: reference_1},
         {creation: 225351535,
          id: reference }]
        [{creation: 1501535135,
          id: reference_3},
         {creation: 225351535,
          id: reference_4}]
        ]
     }
最后,我想要的输出是一个包含所有creation和id值的单个数组,如下所示:

    {payload=
        [{creation: 1501535135,
          id: reference_1},
         {creation: 225351535,
          id: reference_2,
          {creation: 1501535135,
          id: reference_3},
         {creation: 225351535,
          id: reference_4}]
     }
我尝试了几种不同的方法,首先我尝试通过仅过滤一种对象类型的数组来转换它,以便删除字符串(xyz,abc):

singleArray:payload过滤器((元素,索引)->typeOf(元素)=“数组”)


在这一点上,我要将有效载荷展平。但是,筛选器抛出了一个错误。

不确定使用
typeOf
时出现错误的原因,但另一种方法是使用
is
,正如machaval提到的:

注意:下面的示例使用DW 2.0语法

或者这是速记

singleArray: payload[?($ is Array)]
因此,为了获得您的预期结果,我将使用以下方法:

singleArray: flatten(payload[?($ is Array)])
如果您发现仍然需要
typeOf
,这应该可以工作(同样不确定您为什么会看到该错误)


typeOf
返回的是
Type
类型,而不是
字符串
类型,因此必须将其转换为字符串

不确定为什么使用typeOf会出现错误,但我切换到了这个有效的表示法

singleArray:flant(有效负载过滤器$is:array)


感谢@short stack stevens的回复,您帮助我朝着正确的方向前进。

请不要使用此机制来比较类型,而用户
typeOf(元素)是数组。
感谢您的建议,我仍然收到错误“没有名为'typeOf'的变量”
singleArray: flatten(payload[?($ is Array)])
singleArray: payload filter ((element, index) -> (typeOf(element) as String) == "Array")