简体   繁体   中英

Dataweave: single item into an array, if not null

I am receiving a payload from an API call, and I need to transform a single value into an array with a single element.

say these are two examples is my payload:

{
  "name": "Bob",
  "loanTerms": {
    "term": 120,
    "loanRate": 0.0213,
    "maxApproved": 60000
  }
}

and

{
  "name": "Bob",
  "loanTerms": null
}

I want to do something like this:

{
    Name: payload.name
    LoanOptions: [
        {
            ProductName: payload.loanTerms.term as :string,
            DisplayName: null,
            LoanTermMonth: payload.loanTerms.term,
            Rate: payload.loanTerms.loanRate*100,
            Amount: payload.loanTerms.maxApproved
        } when payload.loanTerms?
    ]
}

but the editor keeps barfing at me saying "multiple markers at this line" (the LoanOptions: line)

The when statement is incomplete. On one hand, the otherwise operator is missing. On the other, is anything else after payload.loanTerms? Also, a comma is needed after the Name field.

Plus, you can remove the square brackes:

{
    Name: payload.name,
    LoanOptions:
        [{
            ProductName: payload.loanTerms.term as :string,
            DisplayName: null,
            LoanTermMonth: payload.loanTerms.term,
            Rate: payload.loanTerms.loanRate*100,
            Amount: payload.loanTerms.maxApproved
        }] when payload.loanTerms != null
        otherwise []       
}

This may not be a graceful solution but does the job for you.

%dw 1.0
%output application/json
---
{
 Name: payload.name,
 (LoanOptions:          
       [{
        ProductName: "abc" as :string,
        DisplayName: null,
        LoanTermMonth: payload.loanTerms.term,
        Rate: payload.loanTerms.loanRate*100,
        Amount: payload.loanTerms.maxApproved

        }]) when payload.loanTerms != null,
 (LoanOptions: null) when payload.loanTerms == null

 }

You may remove the 2nd Loanoptions ( as shown below) mentioned in solution if you dont want to display anything when loanTerms is not present in input.

%dw 1.0
%output application/json
---
{
 Name: payload.name,
 (LoanOptions:          
   [{
    ProductName: "abc" as :string,
    DisplayName: null,
    LoanTermMonth: payload.loanTerms.term,
    Rate: payload.loanTerms.loanRate*100,
    Amount: payload.loanTerms.maxApproved

    }]) when payload.loanTerms != null
 }

You need to add conditions in when tag as well as add otherwise condition as well. Take a look at below code snippet

%dw 1.0

%output application/json { Name: payload.name, LoanOptions: { ProductName: payload.loanTerms.term as :string, DisplayName: null, LoanTermMonth: payload.loanTerms.term, Rate: payload.loanTerms.loanRate*100, Amount: payload.loanTerms.maxApproved } when (payload.loanTerms != null) and (payload.loanTerms != []) and (payload.loanTerms != "") otherwise null }

%output application/json { Name: payload.name, LoanOptions: { ProductName: payload.loanTerms.term as :string, DisplayName: null, LoanTermMonth: payload.loanTerms.term, Rate: payload.loanTerms.loanRate*100, Amount: payload.loanTerms.maxApproved } when (payload.loanTerms != null) and (payload.loanTerms != []) and (payload.loanTerms != "") otherwise null }

 %output application/json { Name: payload.name, LoanOptions: { ProductName: payload.loanTerms.term as :string, DisplayName: null, LoanTermMonth: payload.loanTerms.term, Rate: payload.loanTerms.loanRate*100, Amount: payload.loanTerms.maxApproved } when (payload.loanTerms != null) and (payload.loanTerms != []) and (payload.loanTerms != "") otherwise null } 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM