繁体   English   中英

为什么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)

您正在执行的操作与: payload map ((item) -> {(item)})

在这里,您为每一项返回的是表达式{(expr)} ,该表达式在运行于Mule 3.9.1的DW版本中具有偶然的行为,该表达式试图强制expr (在本例中为对象)到对象数组,然后它将尝试展平父对象内该强制数组中的所有对象。 似乎也试图强制更改键的值,这就是DW引发错误的原因。

{()}此行为在较新版本的DW中发生了变化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM