简体   繁体   English

Dataweave:将单个项目放入数组,如果不为null

[英]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. 我正在从API调用接收有效负载,并且需要将单个值转换为具有单个元素的数组。

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) 但是编辑者一直对我bar之以鼻,说“此行有多个标记”(LoanOptions:行)

The when statement is incomplete. when语句不完整。 On one hand, the otherwise operator is missing. 一方面, otherwise会缺少运算符。 On the other, is anything else after payload.loanTerms? 另一方面, payload.loanTerms?之后还有其他内容payload.loanTerms? Also, a comma is needed after the Name field. 另外,在“ Name字段后需要逗号。

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. 如果您不希望在输入中不存在loanTerms时显示任何内容,则可以删除解决方案中提到的第二个Loanoptions(如下所示)。

%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. 您需要在when标记中添加条件,也需要添加其他条件。 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 } 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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