使用 Mule 表达式语言和正则表达式从字符串中获取十进制值
Get decimal value from string using Mule Expression Language and Regex
这个问题涉及到Mule的MEL和regex。我有以下 JSON 负载。
{
"balance": "{Amount={BasicAmount=604.45, MinimumAmount=60 445, CurrencyCode=USD}}"
}
我可以访问余额表示的字符串
{Amount={BasicAmount=604.45, MinimumAmount=60 445, CurrencyCode=USD}}
我需要以字符串形式访问浮点数 604.45 并将其作为流变量应用。因此,我在我的 mule 应用程序中实现了以下代码。
<set-variable variableName="balanceUnrefined" value="#[json:balance]" doc:name="balanceUnrefined"/>
<logger message="#[flowVars.balanceUnrefined]" level="INFO" doc:name="Logger"/>
<set-variable variableName="balanceRefined" value="#[regex('\d+\.\d+'.toString(), flowVars.balanceUnrefined)]" doc:name="balanceRefined"/>
<logger message="#[flowVars.balanceRefined]" level="INFO" doc:name="Logger"/>
最后一个记录器的结果表明为空。我做错了什么?是正则表达式吗?
经过我们的讨论:
也使用scan
函数。它returns一个List<String>
所以你必须拿第一个。它适用于 dw 2.0 上的正则表达式,因此应该适用于 de 1.0。
我的骡子 4 mule-config.xml
:
<ee:set-variable variableName="balance"> <![CDATA[ %dw 2.0 output application/json --- scan(vars.regexpVar, /\d+\.\d+/)[0] ]]> </ee:set-variable> </ee:variables> </ee:transform> <logger doc:id="b458c5f0-5360-40f4-b68c-b5cf1e48da51" doc:name="Logger" doc:timestamp="1518874066833" message="#[vars.balance]"/>
这是我的结果日志:
我不得不按照@shadowsheep 的建议使用转换器来使用扫描功能,这要归功于他的正确做法。这适用于 Mule 3.9 和使用 dataweave 1.0
<set-variable variableName="balanceUnrefined" value="#[json:balance]" doc:name="balanceUnrefined"/>
<set-payload value="#[flowVars.balanceUnrefined]" doc:name="Set Payload"/>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
<dw:transform-message doc:name="Transform Message">
<dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{
"balance": payload scan /\d+\.\d+/
}
]]></dw:set-payload>
</dw:transform-message>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
这个问题涉及到Mule的MEL和regex。我有以下 JSON 负载。
{
"balance": "{Amount={BasicAmount=604.45, MinimumAmount=60 445, CurrencyCode=USD}}"
}
我可以访问余额表示的字符串
{Amount={BasicAmount=604.45, MinimumAmount=60 445, CurrencyCode=USD}}
我需要以字符串形式访问浮点数 604.45 并将其作为流变量应用。因此,我在我的 mule 应用程序中实现了以下代码。
<set-variable variableName="balanceUnrefined" value="#[json:balance]" doc:name="balanceUnrefined"/>
<logger message="#[flowVars.balanceUnrefined]" level="INFO" doc:name="Logger"/>
<set-variable variableName="balanceRefined" value="#[regex('\d+\.\d+'.toString(), flowVars.balanceUnrefined)]" doc:name="balanceRefined"/>
<logger message="#[flowVars.balanceRefined]" level="INFO" doc:name="Logger"/>
最后一个记录器的结果表明为空。我做错了什么?是正则表达式吗?
经过我们的讨论:
也使用scan
函数。它returns一个List<String>
所以你必须拿第一个。它适用于 dw 2.0 上的正则表达式,因此应该适用于 de 1.0。
我的骡子 4 mule-config.xml
:
<ee:set-variable variableName="balance"> <![CDATA[ %dw 2.0 output application/json --- scan(vars.regexpVar, /\d+\.\d+/)[0] ]]> </ee:set-variable> </ee:variables> </ee:transform> <logger doc:id="b458c5f0-5360-40f4-b68c-b5cf1e48da51" doc:name="Logger" doc:timestamp="1518874066833" message="#[vars.balance]"/>
这是我的结果日志:
我不得不按照@shadowsheep 的建议使用转换器来使用扫描功能,这要归功于他的正确做法。这适用于 Mule 3.9 和使用 dataweave 1.0
<set-variable variableName="balanceUnrefined" value="#[json:balance]" doc:name="balanceUnrefined"/>
<set-payload value="#[flowVars.balanceUnrefined]" doc:name="Set Payload"/>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
<dw:transform-message doc:name="Transform Message">
<dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{
"balance": payload scan /\d+\.\d+/
}
]]></dw:set-payload>
</dw:transform-message>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>