仅在 DataWeave 2.0/Mule 4 中映射值

Mapping value only in DataWeave 2.0/Mule 4

我是 Mule 4 的菜鸟,一直在尝试弄清楚如何只映射数组中的值。 我的数组是:

[
  {
    "ssn": "999999991",
    "contributionCode": "1",
    "amt": -100.000000
  },
  {
    "ssn": "999999991",
    "contributionCode": "2",
    "amt": 1200.000000
  }
]

我需要做的是按 contributionCode 和 ssn 过滤数组,return 仅按 amount 值。我试过这个和它的变体,但我只得到错误:

vars.sumAmounts filter ($.ssn == '999999991' and $.contributionCode == '1' ) map -> ({$.amt})

所以我试图从上面得到的输出只有 -100.000000。如果这看起来像是一个基本问题,请提前致歉,但非常感谢任何人的帮助。

@Tek_Datt 这里有两种方法可以做到,这完全取决于您是否会一遍又一遍地这样做。

这是使用您的 filter 函数搜索方法:

%dw 2.0
output application/dw
var data = [
  {
    "ssn": "999999991",
    "contributionCode": "1",
    "amt": -100.000000
  },
  {
    "ssn": "999999991",
    "contributionCode": "2",
    "amt": 1200.000000
  }
]
---
(data filter ($.ssn == "999999991" and $.contributionCode ~= 1)).amt[0]

如果您希望每个转换 运行 多个这样的搜索,那么下一个会更高效:

%dw 2.0
output application/dw
var data = [
  {
    "ssn": "999999991",
    "contributionCode": "1",
    "amt": -100.000000
  },
  {
    "ssn": "999999991",
    "contributionCode": "2",
    "amt": 1200.000000
  }
] groupBy ($.ssn ++ "_" ++ $.contributionCode)
---
data["999999991_1"].amt[0]

选一个你喜欢的。

%dw 2.0 输出 application/json 变种数据= [ { "ssn": "999999991", "contributionCode": "1", "amt":-100.000000 }, { "ssn": "999999991", "contributionCode": "2", "amt":1200.000000 }

]

(数据过滤器 ($.ssn == '999999991' and $.contributionCode == '1' ))[0].amt