在dataweave 2中创建子数组

时间:2019-03-14 11:08:46

标签: mule mule-component dataweave mule-esb

我有一个json消息,并希望获得以下输出。  输入消息:

[
{
 Header:{
id:12,
dept: HR
},
details:[
{ 
 lineid: 1234,
 acc : "ABC"
},
{ 
 lineid: 98745,
 acc : "cba"
}]
}]

预期输出:

[
 {
 "id": 12,
 "lineid": 1234},
 {
 "id": 12,
 "lineid": 98745
 }
]

使用的数据编织:

%dw 2.0
output application/json
---


 payload  map ( payload01 , indexOfPayload01 ) -> {

((payload01.Header map ( payload02, indexOfPayload02 ) -> {
    id: payload01.Header.id,
    lineid: payload02.lineid
} 

) )
} 

“我的输出”看起来很好,只是问题在于该值不在子数组下,即

[  {  “ id”:12  “ lineid”:1234,  “ id”:12  “ lineid”:98745  } ]

1 个答案:

答案 0 :(得分:0)

嗨,我在您的脚本中看到两件事:一是内部映射应该是细节而不是标题(我想这是将其复制到stackoverflow时的复制粘贴或问题简化问题,否则将无法正常工作)。另一个问题是将{(

一起使用
{    
     (
        (payload01.Header map ( payload02, indexOfPayload02 ) -> {
            id: payload01.Header.id,
            lineid: payload02.lineid
        }) 
     )
}

这种语法扩展了对象内部的数组,请参见https://docs.mulesoft.com/mule-runtime/4.1/dataweave-types#dynamic_elements

因此,如果将其更改为

payload map ((payload01, indexOfPayload01) -> 
  payload01.details map (payload02, indexOfPayload02) -> {
    id: payload01.Header.id,
    lineid: payload02.lineid
  })

它产生

[
  [
    {
      "id": 12,
      "lineid": 1234
    },
    {
      "id": 12,
      "lineid": 98745
    }
  ]
]