You need to enable JavaScript to run this app. Dataweave 1.0脚本迁移至2.0触发无效输入语法错误的解决咨询
优惠活动
大模型
产品
解决方案
定价
更多

Dataweave 1.0脚本迁移至2.0触发无效输入语法错误的解决咨询

DataWeave 1.0转2.0语法报错原因与等价实现

报错根因

  • 切片语法不兼容:DataWeave 1.0 支持用 [起始索引..结束索引] 做字符串/数组的范围截取,该写法在2.0版本中被移除。解析器遇到方括号内的..连接符会直接中断解析流程,将后续识别为非法属性名读取,触发“期望输入类型为PropertyName”的语法错误,报错位置可能偏移到filter或map语句行,和你遇到的报错表现完全匹配。
  • 高阶函数解析规则变化:2.0版本对高阶函数(filter/map)的嵌套表达式解析比1.0严格,多层括号嵌套未显式声明迭代参数时,容易出现语法边界识别错误,进一步放大报错位置的偏差。

完全等价的2.0实现代码

%dw 2.0
output application/java
// 1:1复刻原1.0版本checkNull的判断逻辑
fun checkNull(value) = if (value == null) '' else value
---
payload.MMAP_SUPPLIER_DETAILS_OBJ_TYPE.SITES.*MMAP_SUPPLIER_SITE_OBJ_TYPE
    filter (site -> 
        // 替换1.0的[0..3]为2.0兼容的[0 to 3]范围截取,保持闭区间取值逻辑完全不变
        (site.VENDOR_SITE_CODE[0 to 3] == 'CHN '
            or site.VENDOR_SITE_CODE[0 to 3] == 'FDL '
            or site.VENDOR_SITE_CODE[0 to 3] == 'HPP '
            or site.VENDOR_SITE_CODE[0 to 3] == 'MEX '
            or site.VENDOR_SITE_CODE[0 to 3] == 'P&A '
            or site.VENDOR_SITE_CODE[0 to 3] == 'STC ')
        and (site.ORG_ID == '116' or site.ORG_ID == '5195')
        and checkNull(site.INACTIVE_DATE) == ''
    )
    map (validSite) -> {
        // 替换原[0..2]切片为2.0兼容写法,截取前3位字符的逻辑不变
        Entity: validSite.VENDOR_SITE_CODE[0 to 2]
    }

功能等价性校验说明

  • 截取逻辑无偏差:[0 to n]的取值范围为包含索引0到n的闭区间,和1.0版本[0..n]的截取结果完全一致,不会出现字符偏移
  • 过滤规则无改动:站点编码前缀判断、组织ID范围判断、无效日期非空判断的条件与原脚本完全对齐
  • 输出结构无差异:最终生成的Java格式对象仅包含Entity字段,取值规则与原脚本完全一致

可选代码优化(功能与原逻辑完全等价):
为减少重复判断语句,可以将多段or连接的站点编码校验替换为集合匹配:

// 替换原filter内的多段站点编码or判断
(['CHN ', 'FDL ', 'HPP ', 'MEX ', 'P&A ', 'STC '] contains site.VENDOR_SITE_CODE[0 to 3])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 15:36:03