我有一个地图列表(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
}
答案 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 ($$ ++ $)
}
,filter
,flatten
等来测试和评估结果。