2016-02-12 2 views
2

DataWeave не нравится то, что я пытаюсь сделать с ним, и я не уверен, что я что-то делаю неправильно, или если это ограничение DataWeave, которое не является возможное.Параметр динамического ключевого значения в DataWeave

Вот сценарий: я запрашивая Salesforce и получить два значения обратно: давайте назовем их X и Y.

Вот возвращение я хочу [{X:Y}, {X2:Y2}, {X3:Y3}, ...] однако, используя DataWeave оно не представляется возможным, чтобы получить пару ключей значение как это, вместо того, это только кажется, можно определенно установить ключ для каждого значения в сценарии, как так: [{Value_X: X, Value_Y: Y}, {Value_X: X2, Value_Y: Y2}, ...]

Вот мой текущий сценарий DataWeave, который работает, но дает мне второй результат:

%dw 1.0 
%output application/java 
--- 

payload map { 
    Value_X: $.X, 
    Value_Y: $.Y 
} 

А вот сценарий DataWeave, что я желаю работал, но не

%dw 1.0 
%output application/java 
--- 

payload map { 
    $.X: $.Y 
} 

ответ

7

Для того, чтобы ваш Dataweave код, чтобы работать должным образом, вы должны окружить переменную, которую вы хотите использовать в качестве ключа со скобками:

%dw 1.0 
%output application/java 
--- 

payload map { 
    ($.X): $.Y 
} 
0

Похоже DataWeave не в состоянии сделать это из моих экспериментов. Я получил его для работы с использованием Python скриптового трансформатора. Вот XML, который будет правильно выполнять этот перевод:

<scripting:transformer doc:name="Python"> 
<scripting:script engine="jython"> 
<![CDATA[ 
    map = {} 
    while (payload.hasNext()): 
     next = payload.next() 
     map[next['X']] = next['Y'] 
    result = map 
]]> 
</scripting:script> 
</scripting:transformer> 
7

Вы можете попробовать, что на картинке ниже?

enter image description here

+0

Я думаю, что вы можете быть на правильном пути, и я думаю, что это будет работать для нормального входа, но Salesforce возвращает ConsumerIterator, и DataWeave выбрасывает это исключение '1. Не могу принудить: iterator к объекту: (com.mulesoft.weave.model.values.coercion.exception.UnsupportedTypeCoercionExc eption) ' –

0

В моем случае, у меня есть имена столбцов отдельно от значений столбцов.

<results> 
    <meta-data> 
    <column-label>X1</column-label> 
    <column-label>X2</column-label> 
    </meta-data> 
    <data> 
    <column-value>Y1</column-value> 
    <column-value>Y2</column-value> 
    </data> 
</results> 

Следующая КВЛ макет работал:

%dw 1.0 
%output application/json 
--- 
using (y= payload.results) 
y.data map using (x= payload.results.meta-data[$$]) { 
    (x): $ 
} 
-1

Самый простой способ (payload01.Notification.dynamicProperties map (payload02, indexofPayload02) -> { (payload02.name) : payload02.value })