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

如何用DataWeave验证Mule 4中列表元素是否符合所有条件

用DataWeave验证数组对象所有条件并返回单个布尔值

输入载荷

{
  "P_CUST_ACCOUNTS": [
    {
      "ACCOUNT_NUMBER": 62972,
      "ADDR_CHG_FLAG": "N"
    },
    {
      "ACCOUNT_NUMBER": 94561,
      "ADDR_CHG_FLAG": null
    }
  ]
}

需要验证的条件

  • 数组中的每个对象都包含ACCOUNT_NUMBER和ADDR_CHG_FLAG字段
  • 每个对象的ACCOUNT_NUMBER值非空且不为空内容
  • 每个对象的ADDR_CHG_FLAG值非空且不为空字符串(注:示例中该字段为null却要求返回true,推测实际需求允许该字段值为null,仅需确保不为空字符串,后续代码适配此场景)

问题分析

你之前合并条件的写法逻辑冗余且易出错,核心问题是没利用好every操作符的特性——every可直接对数组每个元素同时验证多条件,只有所有元素满足全部条件时才返回true,否则返回false。

正确实现代码

%dw 2.0
output application/json
---
payload.P_CUST_ACCOUNTS every (
    // 条件1:两个字段均存在
    $.ACCOUNT_NUMBER? 
    and $.ADDR_CHG_FLAG?
    // 条件2:ACCOUNT_NUMBER非空且不为空内容
    and !isEmpty($.ACCOUNT_NUMBER)
    // 条件3:ADDR_CHG_FLAG不为空字符串(允许null,匹配示例返回true的要求)
    and (isEmpty($.ADDR_CHG_FLAG as String) == false or $.ADDR_CHG_FLAG == null)
)

代码解释

  1. every操作符:遍历P_CUST_ACCOUNTS数组的每个对象,仅当所有对象都满足括号内全部条件时,最终结果为true。
  2. 字段存在验证:$.ACCOUNT_NUMBER?和$.ADDR_CHG_FLAG?检查对象是否包含对应字段,返回布尔值。
  3. ACCOUNT_NUMBER非空验证:!isEmpty($.ACCOUNT_NUMBER)确保字段值不是null、空字符串或空集合等空值。
  4. ADDR_CHG_FLAG验证:结合示例需求,判断“不为空字符串”或“为null”;若实际需求为严格非空(不允许null),可修改为!isEmpty($.ADDR_CHG_FLAG as String)。

严格非空场景简化写法

如果要求ADDR_CHG_FLAG必须非null且不为空字符串,可使用以下代码:

%dw 2.0
output application/json
---
payload.P_CUST_ACCOUNTS every (
    $.ACCOUNT_NUMBER? 
    and !isEmpty($.ACCOUNT_NUMBER)
    and $.ADDR_CHG_FLAG? 
    and !isEmpty($.ADDR_CHG_FLAG as String)
)

内容的提问来源于stack exchange,提问作者airmail

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:53:11