You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 12:10:38