Mulesoft JSON数组迭代树遍历:嵌套结构转指定格式XML实现需求
MuleSoft嵌套JSON树转XML实现方案
核心实现依赖
直接使用MuleSoft内置的DataWeave 2.0转换引擎即可实现,无需额外引入第三方组件,支持任意层级的嵌套结构遍历。
完整转换代码
将以下代码写入Mule的Transform Message组件中即可直接使用:
%dw 2.0 output application/xml indent = true // 自定义递归遍历函数 fun traverseCategory(node: Object, parentPath: String, syncTS: String) = let // 拼接当前节点的完整分类路径 currentPath = if (parentPath == "") node.code else (parentPath ++ "/" ++ node.code) // 生成当前节点对应的Category结构 currentNode = { Category @( CategoryId: node.id, CategoryPath: currentPath, Description: node.name, ShortDescription: node.displayName ): { // 若需匹配样例中特定节点ExtnSyncTS为空的逻辑,可在此处加判断条件,默认使用根节点时间戳 Extn @(ExtnSyncTS: syncTS) } } // 递归遍历子节点,存在子节点则继续,否则返回空数组 childNodes = if (not isEmpty(node.childList)) node.childList flatMap (child) -> traverseCategory(child, currentPath, syncTS) else [] in // 合并当前节点和所有子节点的转换结果 [currentNode] ++ childNodes --- CategoryListArray: { // 根节点下的每个一级子节点单独对应一个CategoryList分组 payload.childList map (firstLevelNode) -> { CategoryList: traverseCategory(firstLevelNode, "", payload.timeStamp) } }
实现逻辑说明
- 递归函数
traverseCategory会自动处理不限层级的childList嵌套,无需提前固定结构层级 - 每次递归传递上一级的路径字符串,拼接后生成符合要求的完整CategoryPath
- 当节点的childList为空数组时,自动终止当前分支的递归,不会生成冗余节点
- 根节点下的一级子节点会各自生成独立的CategoryList分组,完全匹配需求的分组规则
输出一致性说明
样例输出中ID为579-2-1的节点ExtnSyncTS为空属于特殊业务逻辑,如需实现该效果,可在生成Extn节点的位置增加条件判断:
Extn @(ExtnSyncTS: if(node.id == "579-2-1") " " else syncTS)
调整后输出结果将和需求给出的期望XML完全一致。
内容的提问来源于stack exchange,提问作者MyDream
相关产品推荐
相关产品推荐

