对象数组到包含所有所述对象的单个对象 Dataweave

问题描述

我正在尝试转换以下对象数组输入:

[
 {
    "Id": "3","Code": "4190484","Expense": "Huge Expense "   
 },{
    "Id": "4","Code": "271","Expense": "Big Expense"   
 },{
    "Id": "3","Code": "433","Expense": "No Expense"   
 } 
]

到这个单个对象的输出

{
    "Id": "3","Expense": "Huge Expense ","Id": "4","Expense": "Big Expense","Id": "3","Expense": "No Expense"
}

您将如何在 Dataweave 中完成此操作?

解决方法

您还可以使用该语言的 dynamic elements 功能:

%dw 2.0
output application/json
---
{(payload)}

就像@aled 在他的回答中解释的那样,你不应该在 JSON 中使用重复的键。

,

您可以使用 reduce() 函数,但请注意,在 JSON 中使用重复键取决于实现。我认为在 JSON 中使用重复键是一个糟糕的设计。它可能会导致意外行为。某些实现可能会忽略重复项。例如,DataWeave 将仅返回带有 payload.Id 的结果对象的一个​​ Id。

如果即使在我提到的之后你仍然想要继续,这是一个例子:

%dw 2.0
output application/json
---
// I don't recommend to use duplicate keys
payload reduce  ((item,acc = {}) -> acc ++ item)