0

我在 Mule 中处理一个相当棘手的数据集,需要使用 DataWeave 对数组中返回的许多记录进行一些数学运算。我正在处理的数组如下所示:

[
  {
    "id": "1",
    "type": "AAA",
    "metadata": {
      "balance": "500"
    }
  },
  {
    "id": "2",
    "type": "BBB",
    "metadata": {
      "total": "200"
    }
  },
  {
    "id": "3",
    "type": "AAA",
    "metadata": {
      "balance": "-100"
    }
  }
]

我试图达到的结果如下所示:

{
  "X": 200, //sum (all metadata/balance where type=AAA) - (all metadata/total where type=BBB) ** in this case, (500 + -100)-(200)=400
  "Y": 500, //sum all +ve metadata/balance where type=AAA
  "Z": 300 //sum (all metadata/total where type=BBB) + (all -ve metadata/balance where type=AAA * -1) ** in this case, (200)+(-100 * -1)=300
}

我已经浏览了尽可能多的文档,并且正在努力寻找答案。更尴尬的是,我需要求和的值string在入站消息中以格式呈现,并且需要在integer出站消息中以格式呈现。

任何指导将不胜感激。

4

2 回答 2

0

这是一种方法。

%dw 1.0
%output application/json
---
using (
  aaa = payload[?($.type == "AAA")],
  bbbTotal = sum payload[?($.type == "BBB")].metadata.total
) {
    X: sum aaa.metadata.balance - bbbTotal,
    Y: sum aaa.metadata.balance,
    Z: bbbTotal - sum aaa.metadata.balance[?($ < 0)]
  }   
于 2016-03-01T13:14:50.440 回答
0

试试这个:

%dw 1.0
%output application/json
%function getMetadataByType(type) (payload[?($.type == type)].metadata)
%function sumPositiveBalance(type) ((sum getMetadataByType(type).balance[?($ > 0)]) default 0)
%function sumNegativeBalance(type) ((sum getMetadataByType(type).balance[?($ < 0)]) default 0)
%function sumAllBalance(type) ((sum getMetadataByType(type).balance) default 0)
%function sumTotal(type) ((sum getMetadataByType(type).total) default 0)
%var valueOfX = sumAllBalance("AAA") - sumTotal("BBB")
%var valueOfY = sumPositiveBalance("AAA")
%var valueOfZ = sumTotal("BBB") + (sumNegativeBalance("AAA") * -1)
---
{
    X: valueOfX,
    Y: valueOfY,
    Z: valueOfZ
}
于 2016-03-01T14:04:15.807 回答