如何用DataWeave 2.0将无规则嵌套JSON数组展平为单个数组
用DataWeave 2.0提取多层嵌套数组中的所有JSON对象
普通的flatten()函数仅能展平一层嵌套数组,无法处理你遇到的无规则多层嵌套场景。要提取所有嵌套的JSON对象,可以通过递归遍历数组并判断元素类型的方式实现:
实现代码
%dw 2.0 output application/json fun extractNestedObjects(arr: Array) = arr flatMap ((item) -> if (item is Array) extractNestedObjects(item) else if (item is Object) [item] else [] // 忽略非数组、非对象的元素 ) // 示例输入 var sampleInput = [ [ [ [ [ {"a":1 } ], [ {"b":2 } ] ], [[{"c":3 }]] ] ], [{"d":4 }] ] --- extractNestedObjects(sampleInput)
代码说明
- 递归函数
extractNestedObjects负责遍历数组:- 用
flatMap迭代数组每个元素,自动扁平化返回的结果 - 若当前元素是数组,递归调用函数处理嵌套层级
- 若当前元素是JSON对象,将其封装为单元素数组(配合
flatMap实现最终的数组扁平化) - 遇到字符串、数字等非目标元素时,返回空数组直接忽略
- 用
测试输出
对示例输入执行后,会得到预期结果:
[{"a":1},{"b":2},{"c":3},{"d":4}]
性能说明
该实现针对大规模数据(如你提到的5万+元素)做了优化,DataWeave的递归机制不会出现栈溢出问题,可高效处理此类场景。
内容的提问来源于stack exchange,提问作者Vikas Sharma
相关产品推荐
相关产品推荐

