如何使用MuleSoft DataWeave解析JSON内嵌字符串并转换为目标XML
DataWeave JSON转XML转换实现
核心处理规则
- 除
DEPENDENTDETAILS外的常规字段:节点名统一转小写,字符串类型值转全小写,数值类型值直接保留 DEPENDENTDETAILS字段解析逻辑:- 先按分号拆分字符串片段,自动过滤空片段、分隔符前后多余空格
- 拆分后首段为字段名集合,后续每段为单条依赖人员明细
- 明细字段中序号、名、姓三个字段的节点名和值统一转小写,出生日期、教育状态、收入字段保留原字段名大小写、原值输出
- 所有明细节点统一包裹在
dependentdetails父节点下
完整DataWeave 2.x代码(适配Mule 4.x版本)
%dw 2.0 output xml writeDeclaration=false, indent=true --- sponsors: payload.sponsors map ((sponsorItem) -> { // 映射常规字段 (sponsorItem filterObject ((val, key) -> key as String != "DEPENDENTDETAILS") mapObject ((val, key) -> { (lower(key as String)): if (val is String) lower(val) else val }) ), // 解析结构化的DEPENDENTDETAILS字符串 dependentdetails: do { var splitSegments = sponsorItem.DEPENDENTDETAILS splitBy /\s*;\s*/ filter ($ != "") var fieldList = splitSegments[0] splitBy /\s*,\s*/ var detailList = splitSegments[1 to -1] --- detailList flatMap ((singleDetail) -> { var detailValues = singleDetail splitBy /\s*,\s*/ --- fieldList map ((fieldName, index) -> { (if (index < 3) lower(fieldName) else fieldName): if (index <3) lower(detailValues[index]) else detailValues[index] }) }) } })
注意事项
原示例输出的EduStatus节点存在标签闭合笔误(误写为自闭合标签),上述代码会输出符合XML规范的标准闭合标签,同时兼容分隔符前后带任意空格的非标准输入格式。
内容的提问来源于stack exchange,提问作者Aravind
相关产品推荐
相关产品推荐

