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

DataWeave 2中能否将字符串形式的代码解析执行?

问题描述

假设file.properties文件中有如下配置项:

aaa.code=now() - |P2D|

使用以下DataWeave 2代码读取该配置时,返回的是字符串形式的原始内容,而非执行now() - |P2D|后的计算结果:

%dw 2.0
output application/json
---
{ "from": p('aaa.code') }

需要实现解析执行该配置中的DataWeave表达式,但不能使用eval、execute这类实验性方法。

解决方案

由于官方动态执行的实验性方法不符合要求,只能通过手动解析配置字符串的方式实现逻辑,核心思路是拆解表达式中的函数和参数,再用DataWeave原生能力完成计算。

针对当前场景的实现

针对now() - |P2D|这类特定格式的表达式,可编写自定义函数来解析:

%dw 2.0
output application/json
import * from dw::core::Dates

fun parseExpr(expr: String) = do {
    // 拆分表达式为操作符两侧的内容
    var parts = splitBy(expr, " - ")
    // 提取时间间隔字符串(去除前后的|符号)
    var durationStr = replace(parts[1], /^\|(.*)\|$/, "$1")
    ---
    now() - duration(durationStr)
}
---
{ "from": parseExpr(p('aaa.code')) }

扩展适配更多场景

如果配置中的表达式格式更复杂(比如支持不同时间函数、加法操作等),可以扩展解析逻辑:

  • 用正则表达式精准匹配函数名、参数和操作符
  • 封装不同函数的处理分支(比如兼容utcNow())
  • 增加对加法、乘法等其他时间操作的支持

这种方法完全基于DataWeave的稳定特性,虽然灵活性不如动态执行,但避免了使用实验性API的风险。

内容的提问来源于stack exchange,提问作者YannickN.fr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:09:57