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