将具有相同键的对象转换为对象数组的数据编织转换

问题描述 投票:0回答:2

以下示例包含相同的键“行”。可能有成千上万个这样的对象。 我需要一个最佳解决方案来转换以下对象:

{
    "row":{
        "name": "abc"
    },
    "row":{
        "school": "pqr"
    }
}

要求输出:

{
    "rows":
    [
        {
            "name": "abc"
        },
        {
            "school": "pqr"
        }
    ]
}
mule dataweave mulesoft anypoint-studio
2个回答
1
投票

这里 groupBy 将有助于对相似的键进行分组,而 pluck 会将对象转换为数组。

  • 方案一:使用mapObject()。这是一个更好的解决方案,因为相对于下面的第二个解决方案,这里消除了 2 个 plucks。
%dw 2.0
output application/json
---
(payload groupBy $$) mapObject (($$): ($ pluck $))

输入

{
    "row":{
        "name": "abc"
    },
    "row":{
        "school": "pqr"
    }
}

输出

[
  {
    "row": [
      {
        "name": "abc"
      },
      {
        "school": "pqr"
      }
    ]
  }
]
  • 解决方案 2:使用 map()

如果您想要 rows 作为硬编码键,则将

 (($ pluck $$)[0]):($ pluck $)
替换为
("rows"):($ pluck $)

%dw 2.0
output application/json
---
(payload groupBy $$)pluck $ map{
    (($ pluck $$)[0]):($ pluck $)
}

1
投票

只需使用多值选择器来获取具有相同键的所有键 姓名:

https://docs.mulesoft.com/dataweave/2.4/dataweave-selectors

%dw 2.0
output application/json
---
rows: payload.*row
© www.soinside.com 2019 - 2024. All rights reserved.