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