DataWeave中的动态键值对

时间:2016-02-12 16:38:43

标签: mule dataweave

DataWeave不喜欢我正在尝试用它做什么,而且我不确定我做错了什么,或者它是否是DataWeave的限制是不可能的。

这是一个场景:我正在查询Salesforce并获得两个值:让我们称之为X和Y.

这是我想要的返回[{X:Y}, {X2:Y2}, {X3:Y3}, ...]但是,使用DataWeave似乎不可能获得像这样的键值对,相反,它似乎只能为脚本中的每个值专门设置Key,如下所示: [{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 个答案:

答案 0 :(得分:10)

为了让您的Dataweave代码正常工作,您需要将要用作括号的键的变量包围起来:

%dw 1.0
%output application/java
---

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

答案 1 :(得分:7)

您可以尝试下图中的内容吗?

enter image description here

答案 2 :(得分:1)

答案 3 :(得分: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): $
}

答案 4 :(得分:0)

对于动态键:值对映射mapobject是唯一的方法。

请阅读以下链接,了解有关mapobject

的更多信息

https://docs.mulesoft.com/mule-user-guide/v/3.8/dataweave-operators#map-object

答案 5 :(得分:-1)

似乎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>

答案 6 :(得分:-1)

最简单的方法是(payload01.Notification.dynamicProperties map (payload02, indexofPayload02) -> { (payload02.name) : payload02.value })