How to get parent object value to filter child object

Viewed 17

I am new for mulesfot and I want to filter below payload parent object name when characters[].data[] array "name": "WBB" and "priority": 1

Can some one help me please?.

json payload

--

{

 "offers": [

  {

   "id": 100,

   "name": "Test1",

   "category": {

    "characters": [

     {

      "data": [

       {

        "name": "WBB",

        "priority": 1

       },

       {

        "name": "ILL",

        "priority": 2

       }

      ]

     }

    ]

   }

  },

  {

   "id": 200,

   "name": "Test2",

   "category": {

    "characters": [

     {

      "data": [

       {

        "name": "ISS",

        "priority": 1

       },

       {

        "name": "ILL",

        "priority": 2

       }

      ]

     }

    ]

   }

  },

  {

   "id": 300,

   "name": "Test3",

   "category": {

    "characters": [

     {

      "data": [

       {

        "name": "WSS",

        "priority": 1

       },

       {

        "name": "ILL",

        "priority": 2

       }

      ]

     }

    ]

   }

  }

 ]

}

 

Expected result

--

{

"name":"Test1"

}

Below code i tried but not suitable to my requirement

--

(flatten(flatten(payload.offers.category.characters) map (item, index) -> item.data filter ($.priority==1 and $.name=="WBB")))
1 Answers

If multiple instances of name ="WBB" and priority = 1 doesn't exist , the following can get you to your goal

%dw 2.0
output application/json

var interim = (payload.offers  map {
    (($$): "true") if((flatten($.category.characters.data).name contains "WBB") and (flatten($.category.characters.data).priority contains 1))
}) - {}
---
name: payload.offers[(1 - sizeOf(interim))].name
Related