2016-02-12 43 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。无法强制a:iterator到a:object(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> 

以下DWL布局工作:

%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 })

相关问题