使用 Dataweave 为设置变量组件过滤有效负载

Filter Payload with Dataweave for a Set Variable component

对于 Mulesoft 4.2 Set Variable 组件,我想分配一个简单的字符串值,该字符串值是从传入的 JSON 有效负载的单个特定记录中提取的。

在我的例子中,仅从以下示例的 'country' 字段中获取值:

[
  {
    "salesID": "4404Bob Builder210032011-02-18T15:52:21+0.00",
    "id": "4404",
    "firstName": "Bob",
    "lastName": "Builder",
    "address": "181 Construction Road, Adelaide, NSW",
    "postal": "21003",
    "country": "New Zealand",
    "creationDate": "2011-02-18T15:52:21+0.00",
    "accountType": "personal",
    "miles": 17469
  }
]

一个非动态的方法是这样的:

payload[0].country

我认为最好的方法是使用过滤器功能。下面的选项给了我整个对象,但我只想要国家字段。

payload filter ($.id == "4404")

Map 函数似乎有点矫枉过正,因为我只想要值本身。我一定是缺少获取国家/地区字段的语法。

您可以尝试以下任何选项吗:

1) (payload groupBy ((item, index) -> item.id))["4404"][0].country 要么 2) (payload map ((item, index) -> if(item.id == "4404") item.country else ""))[0]

谢谢, 阿希什

我做了更多调查,这个解决方案让我足够接近我想要的:

对于我使用过滤器的代码示例,我必须将整个表达式括在括号中,然后我可以使用点引用访问该字段, 但下面的代码将字符串值作为数组中的单个记录给出:

(payload filter ($.id == "4404")).country
[
  "New Zealand"
]

在我的例子中,我知道过滤后的有效负载只会返回一个结果,所以我可以只获取字符串值:

(payload filter ($.id == "4404"))[0].country

enter image description here