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
相关产品推荐
相关产品推荐

