为什么 Mule DataWeave 数组映射会剥离顶级对象?
Why does Mule DataWeave array map strip top level objects?
我试图了解 DataWeave v1.0 在映射根 JSON 数组中的对象时的行为。
在这个阶段,我只想按原样映射数组中的每个项目,而不映射项目的每个单独字段。我需要为数组中的每一项都这样做,因为稍后我想编辑 一些 字段,但由于可能有很多我不希望将它们映射到一个的开销-一个。
这是我的数据编织:
%dw 1.0
%output application/json
---
payload map {
($)
}
这是我的输入:
[
{
"MyString": "ABCD",
"MyNumber": 123,
"AnObject": {
"MyBool": false,
"MyNestedObject": {
"MyNestedString": "DEF"
}
}
}
]
我希望我的输出(在这个阶段)与我的输入完全相同。
相反,我的(错误)输出是:
[
{
"MyString": "ABCD",
"MyNumber": 123,
"MyBool": false,
"MyNestedObject": {
"MyNestedString": "DEF"
}
}
]
如您所见,对象 AnObject
已丢失,但其子项仍然存在。
如果输入包含数组,情况会更糟,例如输入:
[
{
"MyString": "ABCD",
"MyNumber": 123,
"AnObject": {
"MyBool": false,
"MyNestedObject": {
"MyNestedString": "DEF"
}
},
"AnArray": [
{
"Title": "An array item",
"Description": "Pretty standard"
}
]
}
]
抛出错误:
Cannot coerce a :array to a :object.
我也在根数组项上尝试过 mapObject
操作,但我总是 运行 进入相同的行为。有谁能解释这里发生的事情,并告诉我如何动态复制根负载中的每个项目。
Mule 运行时间是 3.9.1.
要遍历数组中的每一项并让它们保持原样,您应该做 payload map $
,这与 payload map ((item) -> item)
相同
您所做的与以下内容相同:payload map ((item) -> {(item)})
。
这里您为每个项目返回的是表达式 {(expr)}
,在 Mule 3.9.1 上运行的 DW 版本中,它有一个意外行为,表达式试图强制 expr
(在这种情况下是一个对象)到对象数组,然后它将尝试展平父对象内该强制数组中的所有对象。看起来也在尝试强制键的值,这就是 DW 抛出错误的原因。
{()}
的这种行为在较新版本的 DW 中发生了变化。
我试图了解 DataWeave v1.0 在映射根 JSON 数组中的对象时的行为。
在这个阶段,我只想按原样映射数组中的每个项目,而不映射项目的每个单独字段。我需要为数组中的每一项都这样做,因为稍后我想编辑 一些 字段,但由于可能有很多我不希望将它们映射到一个的开销-一个。
这是我的数据编织:
%dw 1.0
%output application/json
---
payload map {
($)
}
这是我的输入:
[
{
"MyString": "ABCD",
"MyNumber": 123,
"AnObject": {
"MyBool": false,
"MyNestedObject": {
"MyNestedString": "DEF"
}
}
}
]
我希望我的输出(在这个阶段)与我的输入完全相同。
相反,我的(错误)输出是:
[
{
"MyString": "ABCD",
"MyNumber": 123,
"MyBool": false,
"MyNestedObject": {
"MyNestedString": "DEF"
}
}
]
如您所见,对象 AnObject
已丢失,但其子项仍然存在。
如果输入包含数组,情况会更糟,例如输入:
[
{
"MyString": "ABCD",
"MyNumber": 123,
"AnObject": {
"MyBool": false,
"MyNestedObject": {
"MyNestedString": "DEF"
}
},
"AnArray": [
{
"Title": "An array item",
"Description": "Pretty standard"
}
]
}
]
抛出错误:
Cannot coerce a :array to a :object.
我也在根数组项上尝试过 mapObject
操作,但我总是 运行 进入相同的行为。有谁能解释这里发生的事情,并告诉我如何动态复制根负载中的每个项目。
Mule 运行时间是 3.9.1.
要遍历数组中的每一项并让它们保持原样,您应该做 payload map $
,这与 payload map ((item) -> item)
您所做的与以下内容相同:payload map ((item) -> {(item)})
。
这里您为每个项目返回的是表达式 {(expr)}
,在 Mule 3.9.1 上运行的 DW 版本中,它有一个意外行为,表达式试图强制 expr
(在这种情况下是一个对象)到对象数组,然后它将尝试展平父对象内该强制数组中的所有对象。看起来也在尝试强制键的值,这就是 DW 抛出错误的原因。
{()}
的这种行为在较新版本的 DW 中发生了变化。