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

DataWeave去手机号非数字脚本在Anypoint Studio报错:为何update需schema?

问题场景
  • 开发目标:编写DataWeave脚本清除PhoneNumber字段内的所有非数字字符
  • 运行差异:相同脚本在最新版DataWeave Playground可正常运行,在版本为7.4.2(Build Id: 202001311805)的Anypoint Studio中抛出解析错误
  • 入站负载结构:
{
  "Recipient": {
    "Name": "Bob Newhart",
    "MailingAddress": {
      "Line1": "123 Main Street",
      "Line2": "Apt 5",
      "City": "Cumming",
      "State": "GA",
      "ZipCode": "30009",
      "ZipCodePlus4": "3382"
    },
    "PhoneNumber": "(999) 555-1234",
    "Company": "Disney"
  }
}
  • 触发错误的原始脚本:
%dw 2.0
output application/json
---
(
  payload: payload update {case .Recipient.PhoneNumber -> replace (payload.Recipient.PhoneNumber, /\D/) with ""}
).payload
  • Studio抛出的错误信息:Invalid input "update {case ", expected schema or & (line 6, column 20)
  • 核心疑问:为什么update语句会触发需要schema的校验要求?
错误根因

该报错并非逻辑层触发了输入负载的schema校验流程,本质是不同版本DataWeave的语法演进差异导致的解析失败:

  • DataWeave的对象修改操作符经历了多轮语法调整:
    • 早期2.0/2.1版本使用对象 update { 字段名: 新值 }的语法,update后必须跟随一个纯键值对形式的对象结构定义(即解析器提示中提到的“schema”)
    • 2.2版本将update操作符正式重命名为with,暂保留update的语法兼容,但仍不支持块内的case分支写法
    • 2.3及以上版本对with操作符做了升级,才支持块内使用case .字段路径 -> 新值的嵌套字段选择语法
  • 7.4.2版本Anypoint Studio内置的2.2.x版本DataWeave,解析器遇到update {case片段时,会按照旧语法规则预期看到纯键值对的schema结构,遇到非预期的case关键字就直接抛出解析错误
  • DataWeave Playground搭载最新版DataWeave,因此可以正常运行带case分支的update块写法
兼容旧版Studio的可运行方案

放弃需要高版本支持的update {case ...}块语法,使用从DataWeave 2.0早期就支持的with操作符重构对象结构,同时删除原始脚本中冗余的对象包裹逻辑,可正常在该版本Studio中运行:

%dw 2.0
output application/json
---
payload 
with (
  Recipient = Recipient 
  with (
    PhoneNumber = PhoneNumber replace /\D/ with ""
  )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 22:36:04