如何使用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:指定输出格式为JSONreduce函数:遍历输入的列表(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
相关产品推荐
相关产品推荐

