如何使用DataWeave 2.0转换含重复Part/Labor键的JSON数组结构
前置配置
由于输入JSON存在平级重复的Labor键,默认JSON解析器会覆盖后出现的同键值,导致数据丢失。需要先调整Mule应用中JSON读取器的配置,将duplicateKeyHandling属性设置为ARRAY,这样重复键的值会被解析为数组完整保存。
DataWeave 2.0 转换代码
%dw 2.0 output application/json --- payload flatMap (lineItem) -> lineItem pluck ((value, key) -> if (key == "Part" or key == "Labor") ( (if (value is Array) value else [value]) map (entry) -> { LineDescription: lineItem.LineDescription, LaborOrPart: key, (entry) } ) else [] )
逻辑说明
- 用
flatMap遍历原始数组的每一行条目,将拆分生成的多个子对象自动铺平为一维输出数组 - 用
pluck提取单个行条目内的所有键值对,仅筛选Part和Labor两类键做后续处理 - 兼容重复键解析生成的数组格式:无论对应值是单个对象还是重复键生成的数组,都统一转为数组遍历
- 每个子项生成目标结构时,自动携带上层公共的
LineDescription字段、标记条目类型,再展开Part/Labor的内部字段,完全匹配目标结构要求。
内容的提问来源于stack exchange,提问作者user1905307
相关产品推荐
相关产品推荐

