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

如何为DataWeave 2.0的skipNullOn和isEmpty()设置例外规则?

问题解决:DataWeave中为特定字段设置skipNullOn和isEmpty例外规则

问题描述

处理包含相似对象的数组时,要求:

  1. 仅保留非空字段(通过skipNullOn=everywhere和isEmpty()实现);
  2. 对字段X设置例外:只有原对象包含X字段时才输出fieldX;若X为null/空值,fieldX的value返回false;若X非空,返回upper(X) == "X"的布尔结果;且不能让X字段出现在原本没有该字段的对象中。

输入示例

{
  "data": {
          "array": [
            {
              "A": "A",
              "B": 1,
              "C": "2"
            },
            {
              "A": "A",
              "B": 1,
              "X": "x",
              "C": "2"
            },
            {
              "A": "A",
              "B": 1,
              "C": "2"
            }
          ]
      }
}

修改后的DataWeave代码

%dw 2.0
output application/json skipNullOn = "everywhere"

---
payload.data."array" map (value, index) -> {
    (fieldA: {
        values: [
            value: value.A
        ]
    }) if(!isEmpty(value.A)),
    (fieldB: {
        values: [
            value: value.B
        ]
    }) if(!isEmpty(value.B)),
    (fieldC: {
        values: [
            value: value.C
        ]
    }) if(!isEmpty(value.C)),
    (fieldX: {
        values: [
            value: if(isEmpty(value.X)) false else (upper(value.X) == "X")
        ]
    }) if(value.X present)            
}

关键修改说明

  • 条件判断替换:将fieldX的生成条件从!isEmpty(value.X)改为value.X present,确保只有原对象存在X字段时才生成fieldX,避免无X字段的对象出现该字段;
  • 字段值逻辑调整:在fieldX的value中,通过if(isEmpty(value.X)) false else (upper(value.X) == "X")实现需求:X为空/null时返回false,非空时判断转大写后是否等于"X";
  • 保留原有规则:继续使用skipNullOn=everywhere和其他字段的!isEmpty()判断,保证其他字段仅在非空时输出。

期望输出

[
  {
    "fieldA": {
      "values": [
        {
          "value": "A"
        }
      ]
    },
    "fieldB": {
      "values": [
        {
          "value": 1
        }
      ]
    },
    "fieldC": {
      "values": [
        {
          "value": "2"
        }
      ]
    }
  },
  {
    "fieldA": {
      "values": [
        {
          "value": "A"
        }
      ]
    },
    "fieldB": {
      "values": [
        {
          "value": 1
        }
      ]
    },
    "fieldC": {
      "values": [
        {
          "value": "2"
        }
      ]
    },
    "fieldX": {
      "values": [
        {
          "value": true
        }
      ]
    }
  },
  {
    "fieldA": {
      "values": [
        {
          "value": "A"
        }
      ]
    },
    "fieldB": {
      "values": [
        {
          "value": 1
        }
      ]
    },
    "fieldC": {
      "values": [
        {
          "value": "2"
        }
      ]
    }
  }
]

(注:若输入中第二个对象的X为null/空值,fieldX的value会返回false)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:10:34