0

I have a use case to remove empty json objects from dataweave response.

The dw response after transformation will be like

{
   "remuneration": {
     "allowance": [
       {   
       }
     ]
   },
   "identifiers": {
     "employeeId": "1",
     "id": "E001",
     "payrollId": "901",
     "username": "sample"
   },
   "employment": {
   }
 }

I want the empty objects to be removed from the output.

Expected output:

{
   "identifiers": {
     "employeeId": "1",
     "id": "E001",
     "payrollId": "901",
     "username": "sample"
   }
 }

DWL script

%dw 1.0

 %output application/json skipNullOn="everywhere"
 ---
 {
   (remuneration: {
     (allowance: (payload.remunerations default []) map ((remuneration , indexOfRemuneration) -> {
       amount: remuneration.amount,
       compensationElement: remuneration.compensationElement,
       compensationPlan: remuneration.compensationPlan,
       currency: remuneration.currency
     }) filter $ != {}) when (sizeOf (payload.remunerations)) != 0
     }),
   (identifiers: {
     employeeId: payload.worker.employeeId,
     id: payload.worker.id,
     payrollId: payload.worker.payrollId,
     username: payload.worker.username
   }) when payload.worker != null,
   (employment: {
     nboxDescription: payload.worker.nboxDescription,
     nboxPerformance: payload.worker.nboxPerformance,
     nboxPotential: payload.worker.nboxPotential
   }) when payload.worker != null
 }
1
  • Can you provide an input? Commented Oct 30, 2018 at 13:02

1 Answer 1

2

There is no out of the box way to do that but I built a function that does that

%dw 1.0
%output application/json

%function filterEmpty(value) 
  value match {
    object is :object -> 
      object mapObject {($$) : filterEmpty($)} mapObject ( {($$) : $} when not ($ is :empty) otherwise {}),
    array is :array -> 
       array map filterEmpty($) filter not ($ is :empty)
      ,
    default -> $
  }

---
filterEmpty(payload)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.