5

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
}
4

7 回答 7

14

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

%dw 1.0
%output application/java
---

payload map {
    ($.X): $.Y
}
于 2016-03-11T16:11:11.923 回答
8

你能试试下图中的内容吗?

在此处输入图像描述

于 2016-02-12T19:09:05.697 回答
1

Data Weave 支持条件键值对。

查看此文档 https://docs.mulesoft.com/mule-user-guide/v/3.8/dataweave-types#conditional-elements-2

于 2017-01-25T20:18:39.210 回答
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): $
}
于 2017-02-08T14:10:58.927 回答
0

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

请阅读以下链接以获取与 mapobject 相关的更多信息

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

于 2018-03-08T11:29:21.907 回答
-2

从我的实验来看,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>
于 2016-02-12T18:12:58.303 回答
-2

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

于 2017-02-08T18:29:59.063 回答