Создать подмассив в dataweave 2 - PullRequest
0 голосов
/ 14 марта 2019

У меня есть json meesage и я хочу получить вывод ниже. Входящее сообщение:

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

ожидаемый результат:

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

используется dataweave:

%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 голосов
/ 14 марта 2019

Привет, я вижу две вещи в вашем скрипте. Во-первых, внутренняя карта должна быть деталями, а не заголовком (я полагаю, что это проблема вставки при копировании или проблема упрощения при копировании в 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
    }
  ]
]
...