如何用DataWeave 2.0实现获取嵌套结构所有键的deepKeys函数
DataWeave 2.0 deepKeys 自定义函数实现
以下是完全匹配需求的实现代码:
%dw 2.0 fun deepKeys(e: Any, keys: Array<Key> = []): Array<Key> = if(e is Object) (keys ++ (e pluck $$)) ++ (e pluck $ flatMap deepKeys($)) else if(e is Array) keys ++ (e flatMap deepKeys($)) else keys
实现逻辑说明
- 入参为Object类型时:先提取当前层级所有键,再递归遍历每个属性值,收集深层键后做拼接
- 入参为Array类型时:遍历数组每一项,递归收集每一项的所有键后做扁平化拼接
- 入参为其他类型(字符串、数字、null、布尔值等)时:直接返回空数组,符合无键场景的预期
功能验证
所有测试用例均符合要求:
- 调用
deepKeys({hello: "hi", goodbye: "bye"})返回["hello", "goodbye"] - 调用
deepKeys("hi")返回[] - 调用
deepKeys(null)返回[] - 调用
deepKeys({key1: "1", key2: {key3: "3"}})返回["key1", "key2", "key3"] - 调用
deepKeys([{key1: "1"}, {key1: "2"}, {key1: "3"}])返回["key1", "key1", "key1"]
内容的提问来源于stack exchange,提问作者jerney
相关产品推荐
相关产品推荐

