0

I am receiving the below json from the source:

{
    "totalRows": 2,
    "startRow": 1,
    "endRow": 2,
    "hasNextPage": false,
    "searchResults": {
        "603": {
            "dDocOwner": "sysadmin",
            "dIndexedID": "603",
            "dDocAuthor": "sysadmin",
            "dDocCreator": "sysadmin"
        },
        "3011": {
            "dDocOwner": "sysadmin",
            "dIndexedID": "3011",
            "dDocAuthor": "sysadmin",
            "dDocCreator": "sysadmin"
        }
    }
}

I want to transform the above request into target specific request something as below:

{
"data" : [
{
   "ID":"603",
   "Creator":"6141",
   "Author":"sysadmin",
   "Owner":"sysadmin"},
{
   "ID":"3011",
   "Creator":"6141",
   "Author":"sysadmin",
   "Owner":"sysadmin"}
   ]
}

I have created the below mapping in Dataweave but it's not working, could you please give me some pointers on the same:

%dw 1.0
%output application/json skipNullOn="objects"
---
{
    "data": (payload.searchResults.* map ((payload01 , indexOfPayload01) ->{
 "id": payload01.dIndexedID,
   "Creator": payload01.dDocCreator,
   "Author": payload01.dDocName,
   "Owner": payload01.dDocOwner,
}) when (sizeOf payload) >= 1  otherwise [])
}
halfer
  • 19,824
  • 17
  • 99
  • 186
user3368821
  • 79
  • 2
  • 9

1 Answers1

0

You're mapping an object to an array, pluck is perfect for this!

%dw 1.0
%output application/json
---
{
  data: payload.searchResults pluck ((docObject) -> {
    ID:      docObject.dDocIndexedID,
    Creator: docObject.dDocCreator,
    Author:  docObject.dDocAuthor,
    Owner:   docObject.dDocOwner
  })
}
jerney
  • 2,187
  • 1
  • 19
  • 31