如何在Anytime Studio编写DataWeave实现JSON数组转换
DataWeave 数组转对象转换方案
你的思路是对的,用reduce函数刚好可以实现这类「fieldName-value键值对数组转单对象」的转换,外层原有结构直接遍历保留即可,不需要额外改动。
可直接运行的完整脚本
在Anytime Studio的Transform Message组件中粘贴以下脚本即可匹配输入输出要求:
%dw 2.0 output application/json --- { result: payload.result map (resItem) -> { Labels: resItem.Labels map (labelItem) -> { value: [ labelItem.value reduce ((field, acc = {}) -> { (acc), (field.fieldName): field.value }) ] } } }
核心逻辑说明
- 外层
result、Labels两层数组通过map遍历,完全保留原有层级结构,不做字段增删 - 针对最内层存放字段配置的
value数组,用reduce做聚合处理:- 初始累积值设为空对象
{} - 每遍历一个字段项,就把之前累积的对象,和以
field.fieldName为键、field.value为值的新键值对合并 - 注意动态键外层必须加括号
(field.fieldName),这是DataWeave的固定语法,用来识别变量作为键名
- 初始累积值设为空对象
- 聚合完成的单对象外层包一层数组,匹配输出结构中
value字段为数组的要求
适配说明
这个脚本没有硬编码firstName/lastName这类固定字段名,后续如果内层数组新增了其他fieldName配置项,脚本会自动把新字段合并到输出对象里,不需要额外修改。
用你提供的样例输入测试,输出结果和你给出的期望结构完全一致。
内容的提问来源于stack exchange,提问作者richard
相关产品推荐
相关产品推荐

