簡體   English   中英

Dataweave 2.0 減少function 減少json Mule的陣列

[英]Dataweave 2.0 reduce function to reduce the array of json Mule

我的輸入 Json 如下所示:-

[{
        "eId": "123",
        "eType": "NZ",
        "value": [{
                "tId": "444"
            }, {
                "tId": "555"
            }
        ]
    }, {
        "eId": "456",
        "eType": "AU",
        "value": [{
                "tId": "666"
            }
        ]
    }
]

預計 Output Json 會像:

 [{
        "eId": "123",
        "eType": "NZ",
        "tId": "444"
    }, {
        "eId": "123",
        "eType": "NZ",
        "tId": "555"
    }, {
        "eId": "456",
        "eType": "AU",
        "tId": "666"
    }
]

我嘗試使用如下所示的 reduce function 進行變換。 我沒有得到預期的回應

%dw 2.0
output application/json
---
payload reduce ((val, acc = []) -> 
acc + {
    "id" : val.eId, "type": val.eType, "Tid": val.value map $.tId
})

有人可以糾正我在哪里做錯了嗎

我會做出有根據的猜測,因為預期的示例 output 不完整,預期的 output 應該如下所示:

[
  {
    "eId": "123",
    "type": "Co",
    "tId": "444"
  },
  {
    "eId": "123",
    "type": "Co",
    "tId": "555"
  }
]

腳本:

%dw 2.0
output application/json
fun mapItem(i) = i.value map { eId: i.eId, "type": i.eType, tId: $.tId }
---
payload flatMap mapItem($)

如果需要,請隨時編輯問題以添加更多詳細信息。

您可以嘗試使用以下 dataweave 表達式:

%dw 2.0
output application/json
---
flatten(payload map (it1, ix1) -> 
    it1.value map (it2, ix2) -> {
        eId: it1.eId,
        eType: it1.eType,
        tId: it2.tId
    })

試試這個。

%dw 2.0
output application/json
var inp = payload
---
payload[0].value map {
    eId: inp[0].eId,
    Tid: $.tId
}

更新的解決方案

%dw 2.0
output application/json

---
payload flatMap ((item, index) ->  { 
     a: item.value map {
         eId:item.eId,
         eType: item.eType,
         tId: $.tId
     }}.a)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM