[英]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)
您正在执行的操作与: payload map ((item) -> {(item)})
。
在这里,您为每一项返回的是表达式{(expr)}
,该表达式在运行于Mule 3.9.1的DW版本中具有偶然的行为,该表达式试图强制expr
(在本例中为对象)到对象数组,然后它将尝试展平父对象内该强制数组中的所有对象。 似乎也试图强制更改键的值,这就是DW引发错误的原因。
{()}
此行为在较新版本的DW中发生了变化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.