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

DataWeave 2.0中raw操作符处理变量失效及数值转字符串问题

解决方法:保留数值完整小数部分转字符串(含末尾零)

为什么inputValue.^raw会报错?

^raw操作符仅能作用于原始输入的JSON/XML节点,不能直接用于已经被DataWeave解析后的变量。当你执行var inputValue = payload.message时,DataWeave已经将节点解析为Number类型,原始的字符串格式(包括末尾零)的元数据已丢失;如果payload.message为null,直接转换也会抛出“Cannot coerce Null to String”错误。


方案1:直接对原始节点使用^raw

如果不需要将节点赋值给中间变量,直接对payload.message使用^raw即可保留原始格式:

%dw 2.0
output application/json
---
payload.message.^raw as String

如果必须使用变量,确保变量直接指向原始节点(而非解析后的值),同时处理null情况避免报错:

%dw 2.0
output application/json
var inputValue = payload.message
---
if (inputValue != null) inputValue.^raw as String else null

方案2:处理已解析的数值(保留小数位数)

如果数值已经被解析为Number类型(比如经过计算或转换,丢失了原始格式信息),需要通过格式化函数指定小数位数。若小数位数固定,直接使用formatNumber:

  • 保留1位小数:formatNumber(inputValue, "0.0")
  • 保留2位小数:formatNumber(inputValue, "0.00")

示例代码:

%dw 2.0
output application/json
var inputValue = 123.0 // 已解析的数值
---
formatNumber(inputValue, "0.0") // 输出"123.0"

如果小数位数不固定,需要先获取原始输入的字符串格式(比如将整个payload作为字符串处理,提取对应字段的原始值),示例如下:

%dw 2.0
output application/json
var rawPayload = payload as String
var messageRaw = rawPayload match /"message":(\d+\.\d+)/ 
---
messageRaw[1] default null

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:12:15