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
}
答案 0 :(得分:10)
为了让您的Dataweave代码正常工作,您需要将要用作括号的键的变量包围起来:
%dw 1.0
%output application/java
---
payload map {
($.X): $.Y
}
答案 1 :(得分:7)
答案 2 :(得分:1)
Data Weave支持条件键值对。
请查看此文档 https://docs.mulesoft.com/mule-user-guide/v/3.8/dataweave-types#conditional-elements-2
答案 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 })