DataWeave 中的动态键值对

Dynamic Key Value Pair in DataWeave

DataWeave 不喜欢我尝试用它做的事情,我不确定我是否做错了什么,或者这是不可能的 DataWeave 的限制。

场景如下:我正在查询 Salesforce 并返回两个值:我们称它们为 X 和 Y。

这是我想要的 return [{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
}

根据我的实验,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>

你能试试下图中的东西吗?

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

%dw 1.0
%output application/java
---

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

Data Weave 支持条件键值对。

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

就我而言,我将列名与列值分开。

<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): $
}

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

对于动态 key:value 对映射 mapobject 是唯一的方法。

请阅读以下内容link,了解有关 mapobject 的更多信息

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