数据编织脚本中的Maps变量查找列表

时间:2016-09-02 22:25:15

标签: mule dataweave

我有一个地图列表(listOfMapsObject),如下所示

[
 {
  "Id" : "1234",
  "Value" : "Text1"
  },
  {
  "Id" : "1235",
  "Value" : "Text2"
  }
]

我想访问dataweave脚本中给定Id的“Value”字段。 例如:对于Id = 1234,应返回Text1。

%dw 1.0
%output application/json
%var listOfMapsObject = flowVars.listOfMaps
---
payload map {
    "key" : $.key,
    "data" : lookup Value field in listOfMapsObject by given key 
}

2 个答案:

答案 0 :(得分:2)

@ sulthony h'建议的Approch很好但是如果你在pyload和listOfMapsObject中有大量数据,那么它最终会出现性能问题。使用过滤器时,对于每个有效负载脚本记录,将循环访问flowVars.listOfMaps中的所有条目。

以下工作正常并且只映射一次键值。

%dw 1.0
%output application/json 
%var dataLookup = {(flowVars.listOfMaps map {
        ($.Id): $.Value
     })}
---
payload map {
    key : $.key,
    data : dataLookup[$.key]
}

输出 -

[
  {
    "key": "1234",
    "data": "Text1"
  },
  {
    "key": "1235",
    "data": "Text2"
  }
]

有效负载 -

[
 {
  "key" : "1234" 
  },
  {
  "key" : "1235"
  }
]

和 -

[
 {
  "Id" : "1234",
  "Value" : "Text1"
  },
  {
  "Id" : "1235",
  "Value" : "Text2"
  }
]

希望这有帮助。

答案 1 :(得分:0)

我使用略微相似的对象创建自己的对象,并成功访问" value"具有以下DataWeave表达式的字段:

XCache

您可以使用自己的对象修改它,例如:替换" id"与" Id"。使用%dw 1.0 %output application/json %var listOfMapsObject = flowVars.listOfMaps --- payload map using(data = $) { "key" : data.key, "data" : (listOfMapsObject filter $.id == data.key).value reduce ($$ ++ $) } filterflatten等来测试和评估结果。