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

DataWeave 1.0 lower函数未按预期工作,需实现大小写不敏感的键值过滤移除功能

DataWeave 1.0 lower函数未按预期工作,需实现大小写不敏感的键值过滤移除功能

我明白你的问题了——你现在的函数只能精确匹配大小写完全一致的键或值,但你想要实现不区分大小写、且匹配包含指定关键词的键值对移除功能,对吧?咱们来一步步修复这个问题。

原脚本的问题分析

你的核心需求是:只要键(比如phone、Phone、secondaryPhone)或值(比如Phone)包含指定关键词且不区分大小写,就移除对应的键值对。但原脚本的判断逻辑是精确匹配转小写后的键/值是否完全等于filterList里的元素,这就导致像secondaryPhone、Phone这类包含关键词但不完全相等的情况匹配不上。

修改后的脚本

%dw 1.0
%output application/json skipNullOn="everywhere"
%function remove(content, filterList)
content match {
    :array -> $ map (value,index) -> remove(value, filterList),
    :object -> $ mapObject (value,key) ->
        (key): null when (filterList any (lower key as :string contains lower $))
        otherwise remove(value, filterList)
    ,
    default -> null when ((content !=null) and (filterList any (lower content as :string contains lower $))) otherwise content
}
---
remove(payload,["phone","email","accountNumber"])

关键改动说明

  1. 键的匹配逻辑:把原来的filterList contains (lower key as :string)改成filterList any (lower key as :string contains lower $)

    • any操作符用来检查filterList中是否存在任意一个元素满足后续条件
    • 同时把关键词也转成小写,保证完全不区分大小写的匹配
    • 用contains替代精确匹配,实现“包含关键词即可匹配”的需求
  2. 值的匹配逻辑:把原来的filterList contains content as :string改成filterList any (lower content as :string contains lower $)

    • 同样的逻辑,确保值只要包含指定关键词(不区分大小写)就会被移除

测试验证

用你提供的输入:

{
    "phone":"123-234-9872",
    "Type":"Phone",
    "aType": ["T1", "T2"]
}

运行修改后的脚本,输出完全符合你的预期:

{
    "aType": ["T1", "T2"]
}

备注:内容来源于stack exchange,提问作者daringfireball

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 14:28:14