skip to Main Content

I have below Payload.
Here if points are not divisible by 5, then round up to the nearest 5. So, if the points are 250.2, the resulting number would be 250 and that is divisible by 5
so 250 would be the value returned.
If the resulting value was 251.2, then the resulting whole number would be 251 and that is not divisible by 5 and would be rounded up to 155

{
  "referenceID": "1001",
  "Year": "2023",
  "Type": "BK",
  "contracts": [
    {
      "contractId": "1",
      "contractType": "Booking",
      "Points": "250.2",
      "Reservations": {
        "reservations": [
          
        ],
        "reservationPoints": ""
      }
    },
    {
      "contractId": "1",
      "contractType": "Booking",
      "Points": "251.2",
      "Reservations": {
        "reservations": [
          
        ],
        "reservationPoints": ""
      }
    }
  ]
}

Based on above conditions, output payload should be like below

{
  "referenceID": "1001",
  "Year": "2023",
  "Type": "BK",
  "contracts": [
    {
      "contractId": "1",
      "contractType": "Booking",
      "Points": "250",
      "Reservations": {
        "reservations": [
          
        ],
        "reservationPoints": ""
      }
    },
    {
      "contractId": "1",
      "contractType": "Booking",
      "Points": "255",
      "Reservations": {
        "reservations": [
          
        ],
        "reservationPoints": ""
      }
    }
  ]
}

With regards to this rounding up Points to nearest number divisible by 5, I am using below logic

if (((payload.contracts[0].Points as Number mod 5))<1) 
  (round((payload.contracts[0].Points as Number)/5)*5)
else 
  (ceil((payload.contracts[0].Points as Number)/5)*5) 

This gets the updated value based on condition but I am not able to update the Payload.

2

Answers


  1. Chosen as BEST ANSWER

    Based on the above suggestion, I updated payload like below

       %dw 2.0
        output application/json
        ---
        payload.contracts  map ((item,index)-> item  update {
                case Points at .Points -> if (((Points as Number mod 5))<1) (round((Points as Number)/5)*5)
                 else (ceil((Points as Number)/5)*5) 
        })
    

  2. Make use of update operator just to update Points value in the payload Object. Try like below:

    %dw 2.0
    output application/json
    ---
    
    
    payload update {
        case c at .contracts -> c map ($ update{
            case p at .Points -> if((p mod 5) <1) round((p/5))*5 
            else ceil((p/5))*5
        })
    
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search