Dataweave:单项放入数组,如果不为空

Dataweave: single item into an array, if not null

我正在接收来自 API 调用的负载,我需要将单个值转换为具有单个元素的数组。

说这两个例子是我的有效载荷:

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

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

我想做这样的事情:

{
    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?
    ]
}

但编辑一直对我吐槽说 "multiple markers at this line"(LoanOptions: 行)

when 语句不完整。一方面,缺少 otherwise 运算符。另一方面,在 payload.loanTerms? 之后还有其他内容吗?另外,在 Name 字段之后需要一个逗号。

此外,您可以删除方括号:

{
    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 []       
}

这可能不是一个完美的解决方案,但可以满足您的需求。

%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

 }

如果您不想在输入中不存在 loanTerms 时显示任何内容,您可以删除解决方案中提到的第二个 Loanooptions(如下所示)。

%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
 }

您需要在 when 标记中添加条件以及添加 otherwise 条件。看看下面的代码片段

%dw 1.0</p> <h2>%输出application/json</h2> <p>{ 姓名:payload.name, 贷款选项: { 产品名称:payload.loanTerms.term 为:字符串, 显示名称:空, LoanTermMonth:payload.loanTerms.term, 率:payload.loanTerms.loanRate*100, 金额:payload.loanTerms.maxApproved } when (payload.loanTerms != null) and (payload.loanTerms != []) and (payload.loanTerms != "") 否则为空</p> <pre><code> }