如何在Mule4中使用DataWeave移除JSON中的空键值对
Mule4 DataWeave移除JSON空值对应键实现方案
原代码问题说明
你提供的原有代码仅对JSON最外层对象做过滤,且过滤条件仅排除键为Test的项,既没有判断值是否为空字符串/空数组,也没有处理嵌套的对象、数组结构,因此无法达到预期效果。
实现代码
你可以使用递归函数处理所有层级的JSON结构,逻辑如下:
%dw 2.0 output application/json // 自定义递归函数移除空字符串、空数组对应的键 fun removeEmptyKeys(value) = value match { // 处理对象类型 case obj is Object -> obj // 过滤掉值为空字符串、空数组的键 filterObject ((v, k) -> !(v is String and v == "") and !(v is Array and isEmpty(v))) // 对剩余键的值递归处理 mapObject ((v, k) -> (k): removeEmptyKeys(v)) // 处理数组类型,对每个元素递归处理 case arr is Array -> arr map removeEmptyKeys($) // 其他类型(包括null、普通字符串、数字等)直接返回 case else -> else } --- removeEmptyKeys(payload)
注意:当前实现会保留值为null的键,和你给出的示例要求一致;如果后续需要同时移除值为null的键,只需在filterObject的判断条件中新增and v != null即可。
效果验证
使用你提供的示例输入测试,运行上述代码后输出结果和你的预期完全一致,rateType(空字符串)、agentOfRecord(空数组)两个键会被移除,其余结构和值保持不变。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

