合并数组元素并重新格式化输出

时间:2019-05-09 09:12:35

标签: mule dataweave mule4

我有一个输入JSON,我想使用Mule的dataweave 2.0进行转换。

下面是输入的JSON。

[
   {
     "data1": {
                "role": "analyst",
                "name": "ABC"
     },
     "data2": {
                "role": "analyst",
                "name": "DEF"
     }
  },
  {
     "data1": {
                "role": "RM",
                "name": "PQRS"
     },
     "data2": {
                "role": "analyst",
                "name": "QWE"
     }
  }
]

我们希望输出如下:

[
  {
     "role": "analyst",
     "name": "ABC"
  },
  {
     "role": "analyst",
     "name": "DEF"
  },
  {
     "role": "RM",
     "name": "PQRS"
  },
  {
     "role": "analyst",
     "name": "QWE"
  }
]

我尝试了使用map,pluc和flatten的其他选项,但无法获得解决方案。请为我提供转换功能。

2 个答案:

答案 0 :(得分:1)

如果要保留订单,可以:

1)使用reduce遍历元素,并对数组中的每个对象累积data1data2

%dw 2.0
output application/json
---
payload reduce (item, acc = []) -> (acc << item.data1 << item.data2)

2)使用map,为数组中的每个元素创建一个包含data1data2,然后flatten的中间数组。

%dw 2.0
output application/json
---
flatten (payload map (item) -> [item.data1, item.data2])

答案 1 :(得分:0)

如果对象的响应顺序很重要:

%dw 2.0
output application/json
---
flatten (payload map (flatten $))

如果顺序不重要:

%dw 2.0
output application/json
---
payload.data1 ++ payload.data2