Search code examples
muledataweavemulesoftmule4mule-esb

How to inherit parent elements for each existing child Mule 4


There is an array of parent elements that you need to duplicate for each child sku element you have.

Input:

{
"items": [
    {
        "order": "ASD51247",
        "reference": "271559410",
        "date": "2022-04-01T22:58:19.077Z",
        "lines": [
            {
                "number": "6578523423489",
                "description": "ITEM 1"
            }
        ],
        "received": "2022-03-31T09:46:13.260Z",
        "created": "2022-03-31T09:46:13.109Z"
    },{
        "order": "AST927353",
        "reference": "271944522",
        "date": "2022-04-01T22:58:19.038Z",
        "lines": [
            {
                "number": "4563252696546",
                "description": "ITEM 2"
            },
            {
                "number": "890456234326",
                "description": "ITEM 3"
            }
        ],
        "received": "2022-03-31T10:25:08.508Z",
        "created": "2022-03-31T10:25:08.353Z"
    }
]}

Expected Output:

{ "item":[
  {
     "order":"ASD51247",
     "reference":"271559410",
     "date":"2022-04-01T22:58:19.077Z",
     "number":"6578523423489",
     "description":"ITEM 1",
     "receivedAt":"2022-03-31T09:46:13.260Z",
     "createdAt":"2022-03-31T09:46:13.109Z"
  },
  {
     "order":"AST927353",
     "reference":"271944522",
     "date":"2022-04-01T22:58:19.038Z",
     "number":"4563252696546",
     "description":"ITEM 2",
     "received":"2022-03-31T10:25:08.508Z",
     "created":"2022-03-31T10:25:08.353Z"
  },
  {
     "order":"AST927353",
     "reference":"271944522",
     "date":"2022-04-01T22:58:19.038Z",
     "number":"890456234326",
     "description":"ITEM 3",
     "received":"2022-03-31T10:25:08.508Z",
     "created":"2022-03-31T10:25:08.353Z"
  }]}

In output, must be inherit the parent elements for each child in the "lines" array. Any help would be appreciated. Thank you.


Solution

  • try below script.

    %dw 2.0
    output application/json
    ---
    {
        items: payload.items flatMap ((item, index) -> (
            item.lines map ((line) -> (item - 'lines') ++ {
                description: line.description
            })
        ))
    }