You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MuleSoft的DataWeave中实现指定JSON对象数组转换?

DataWeave实现JSON分组转换问题解决

我需要将给定的输入JSON转换为指定的预期输出JSON,尝试使用filter函数、groupBy函数及如下DataWeave代码,但生成多输出时测试用例失败,请求指导正确的实现方式。

尝试的代码

%dw 2.0
output application/json
---
payload.Bd map (val,index) ->{
    "d23": val,
    "lt":(payload.output2 filter(payload.Bd contains val) map(Value) -> 
    {
        Val34: Value.PId
        }
    )
         
}

输入JSON

[
  {
    "Val34": "968",
    "d23": "Y1"
  },
  {
    
    "Val34": "958",
    "d23": "Y2"
  },
  {
    
    "Val34": "951",
    "d23": "Y2"
  }
]

预期输出JSON

[
  {
    "d23": "Y1",
    "lt": [
      {
        "Val34": "968"
      }
    ]
  },
  {
    "d23": "Y2",
    "lt": [
      {
        "Val34": "958"
      },
      {
        "Val34": "951"
      }
    ]
  }
]

问题分析与正确实现

你尝试的代码错误引用了payload.Bd和payload.output2字段,但输入JSON里并没有这些结构,输入是直接包含目标字段的对象数组。正确的做法是用groupBy按d23字段分组,再将分组结果转换为预期格式:

正确代码

%dw 2.0
output application/json
---
payload groupBy ($.d23) 
mapObject ((value, key) -> {
    d23: key,
    lt: value map { Val34: $.Val34 }
}) 
pluck $

代码说明

  1. payload groupBy ($.d23):将输入数组按d23字段的值分组,得到一个键为d23值、值为对应对象数组的对象。
  2. mapObject ((value, key) -> { ... }):遍历分组后的对象,将每个键值对转换为包含d23(分组键)和lt(处理后的对象数组)的结构。
  3. value map { Val34: $.Val34 }:将分组后的每个对象映射为只保留Val34字段的新对象。
  4. pluck $:将最终的对象转换为数组,匹配预期输出的结构。

内容的提问来源于stack exchange,提问作者codeSolver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:15:30