2016-09-02 1 views
0

У меня есть список карт (listOfMapsObject), как показано нижепросмотра списка переменных карт в переплетении данных сценария

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

Я хотел бы поле доступа «Value» для данного идентификатора в dataweave сценария. Например: для 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

Я создаю свой собственный объект с немного аналогичным объектом и успешно доступом поле «значение» со следующим DataWeave выражения:

%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 ($$ ++ $) 
} 

Вы можете изменить его с помощью собственного объекта, например: заменить «id» с «Id». Тест и оценить результат с помощью filter, flatten, reduce и т.д.

+0

Как я могу избежать повторения (listOfMapsObject filter $ .id == data.key), если мы хотим value1, value2? (data = $) { "key": data.key, "data1": (listOfMapsObject filter $ .id == data.key) .value1 уменьшить ($$ ++ $), "data2": (listOfMapsObject filter $ .id == data.key) .value2 reduce ($$ ++ $)} – user94538

2

Approch предложил @ «sulthony ч» это хорошо, но это будет в конечном итоге в вопросе производительности, если большое количество данных в pyload и listOfMapsObject. Поскольку фильтр используется, для каждой записи сценария полезной нагрузки будет выполняться цикл для всех записей в файле flowVars.listOfMaps.

Следующее будет работать нормально и отображать значение карты только один раз.

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

output-

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

Где Payload -

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

И -

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

Надеется, что это помогает.

+0

спасибо, работал отлично – user94538

+0

, если я жестко задал пример $ .key: dataLookup ["1234"], затем возвращается значение но для dataLookup [$. key] возвращается значение null. В чем может быть проблема? – user94538

+0

Какая версия используемой передачи данных. Он отлично работает с 3.8.1 – AnupamBhusari

Смежные вопросы