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

如何使用DataWeave将Map列表转换为指定格式的JSON?

解决DataWeave列表转指定JSON结构的问题

我来帮你搞定这个DataWeave转换需求!你需要把包含id、value1、value2的Map列表,转换成以data为根元素,且用每个Map的id作为键、对应value字段组成的对象作为值的结构,下面是具体实现方案:

输入示例

[ 
 { "id" : "123", "value1" : "678", "value2" : "900" }, 
 { "id" : "456", "value1" : "679", "value2" : "901" } 
]

预期输出示例

{ 
 "data" : { 
 "123" : { "value1" : "678", "value2" : "900" }, 
 "456" : { "value1" : "679", "value2" : "901" } 
 } 
}

方案一:精准指定value字段

如果你的字段固定是value1和value2,可以用这个明确的写法:

%dw 2.0
output application/json
---
{
    data: payload reduce ((item, accumulator = {}) -> 
        accumulator ++ {(item.id): {value1: item.value1, value2: item.value2}}
    )
}

代码解释

  • %dw 2.0:声明使用DataWeave 2.0版本语法
  • output application/json:指定输出格式为JSON
  • reduce函数:遍历输入的列表(payload),逐个将元素合并到累加器(accumulator)中
  • {(item.id): ...}:用当前元素的id值作为动态键
  • {value1: item.value1, value2: item.value2}:构建包含指定value字段的对象

方案二:通用适配任意附加字段

如果以后可能新增value3、value4这类字段,推荐用更灵活的写法,自动保留除id外的所有字段:

%dw 2.0
output application/json
---
{
    data: payload reduce ((item, accumulator = {}) -> 
        accumulator ++ {(item.id): item - "id"}
    )
}

代码解释

  • item - "id":从当前元素中移除id字段,剩下的所有属性直接作为值对象的内容,无需手动指定每个value字段,扩展性更强

这两个方案都能完美得到你想要的输出结果,根据你的实际需求选择就好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:27:08