Mule 在dataweave中拆分字符串
我有一个字符串,比如“嗨,我来自俄罗斯喀山”。输出应该是Mule 在dataweave中拆分字符串,mule,dataweave,Mule,Dataweave,我有一个字符串,比如“嗨,我来自俄罗斯喀山”。输出应该是 Hi I am from Kazan, Russia 我尝试了regex[^\s\']+\'([^\']*)\“\'([^']*)”,它在上运行得很好。但是在dataweave中它什么也做不到。 这就是我试过的 %dw 1.0 %output application/json %function split(data) {returnData: data splitBy "[^\s\"']+|\"([^\"]*)\"|'([^']*)'
Hi
I
am
from
Kazan, Russia
我尝试了regex[^\s\']+\'([^\']*)\“\'([^']*)”
,它在上运行得很好。但是在dataweave中它什么也做不到。
这就是我试过的
%dw 1.0
%output application/json
%function split(data) {returnData: data splitBy "[^\s\"']+|\"([^\"]*)\"|'([^']*)'"}
---
split(payload)[0]
编辑1
我尝试了扫描操作员这就是我所做的
%dw 1.0
%output application/json
---
{
payload: payload scan /[^\s\"']+|\"([^\"]*)\"|'([^']*)'/
}
但是我得到了NullPointerException
堆栈跟踪
Message : null (java.lang.NullPointerException).
Payload : com.mulesoft.weave.reader.DefaultSeekableStream@5d334a28
Element : /logFlow/processors/0 @ log:log.xml:14 (Transform Message)
Element XML : <dw:transform-message doc:name="Transform Message" metadata:id="87d4353c-240d-4b1c-84b4-171f6c11045b">
<dw:input-payload mimeType="plain/text"></dw:input-payload>
<dw:set-payload>%dw 1.0%output application/json---{payload: payload scan /[^\s\"']+|\"([^\"]*)\"|'([^']*)'/}</dw:set-payload>
</dw:transform-message>
消息:null(java.lang.NullPointerException)。
有效载荷:com.mulesoft.weave.reader。DefaultSeekableStream@5d334a28
元素:/logFlow/processors/0@log:log.xml:14(转换消息)
元素XML:
%dw 1.0%输出应用程序/json---{payload:payload scan/[^\s\']+\'([^\']*)\“\'”([^']*)/}
参考DataWeave文档,正则表达式在/之间定义。因此,将双引号“替换为/。所以它应该是这样的:/[^\s\']+\'([^\']*)\“\'([^']*)”/
另一件事是,splitBy将字符串拆分为一个单独元素的数组。所以你不会得到预期的结果。实际上,有效负载将被拆分为5个元素,但其内容是空的。例如:“a,b,c”splitBy“,”
返回3个元素:“a”-“b”-“c”,逗号/分隔符不是结果的一部分
要获得预期结果,请尝试使用扫描。它返回一个数组,其中包含给定字符串中的所有匹配项。可能您应该相应地修改正则表达式。使用此表达式
%dw 1.0
%输出应用程序/json
%var splittedValue='嗨,我来自俄罗斯喀山'//splitBy''
splittedValue splitBy”“我不确定您在初始查询中使用的语法,但以下内容适用于以下格式的有效负载:
Hello I am from "Kazan, Russia"
以及:
以下示例使用:
,
上进行显式匹配,以帮助匹配位置%dw 1.0
%input payload application/json
%output application/json
%var data = "Hello I am from \"StackOverflow, Internet\""
---
data scan /\w++, \w++|\w++/ reduce ($$ ++ $)
这对我很有用:
%DW2.0
%输出应用程序/json
有效载荷图((有效载荷01,indexOfPayload01)->{
accountType:payload01.accountType,
地址:payload01.street++payload01.city,
国家:payload01.country,
creationDate:payload01.creationDate为:字符串,
firstName:(payload01.name按“”)拆分[0],
id:payload01.accountID,
lastName:(payload01.name按“”)拆分[1],
英里数:有效载荷01.5英里,
邮政:payload01.postal
})
我在dataweave中通过创建一个调用splitBy()函数的userdefine函数实现了这一点
在下面的代码中,我正在分析firstname和lastname中从db返回的名称
%dw 2.0
output application/json
fun split(data) = data splitBy (" ")
---
payload map ( payload01 , indexOfPayload01 ) -> {
id: payload01.accountID default "",
address: ((payload01.street default "") ++ (payload01.city default "")) ++ (payload01.state default ""),
postal: payload01.postal default "",
country: payload01.country default "",
creationDate: payload01.creationDate as String default "",
accountType: payload01.accountType default "",
firstName: split(payload01.name)[0],
lastName: split(payload01.name)[1],
miles: payload01.miles default 0
}
你能解释一下正则表达式部分吗?
\w++、\w++\w++
的作用是什么?我知道\w
将匹配非单词字符,但不会获得其余字符。
%dw 2.0
output application/json
fun split(data) = data splitBy (" ")
---
payload map ( payload01 , indexOfPayload01 ) -> {
id: payload01.accountID default "",
address: ((payload01.street default "") ++ (payload01.city default "")) ++ (payload01.state default ""),
postal: payload01.postal default "",
country: payload01.country default "",
creationDate: payload01.creationDate as String default "",
accountType: payload01.accountType default "",
firstName: split(payload01.name)[0],
lastName: split(payload01.name)[1],
miles: payload01.miles default 0
}