首页 > 解决方案 > 仅在 DataWeave 2.0/Mule 4 中映射值

问题描述

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

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

我需要做的是通过contributionCode 和ssn 过滤数组并只返回金额值。我已经尝试过这个和它的变体,但我只得到错误:

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

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

标签: dataweavemule4

解决方案


@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]

选择你喜欢的那个。


推荐阅读