У меня есть строка типа «Привет, я из« Казани, Россия ». Результат должен быть
Hi
I
am
from
Kazan, Russia
Я попробовал регулярное выражение [^\s\"']+|\"([^\"]*)\"|'([^']*)'
, которое отлично работает на regexp.com. Но в 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>
5 ответов
Я не уверен в синтаксисе, который вы использовали в своем первоначальном запросе, но следующее должно работать для полезных нагрузок со следующими форматами:
Hello I am from "Kazan, Russia"
А также:
Hello I am from "Kazan, Russia
В приведенном ниже примере используются:
Положительные квантификаторы, соответствующие требуемые символы слова.
Явное совпадение на
,
, чтобы помочь сопоставить местоположение.Уменьшить вывод массива .
DataWeave:
%dw 1.0
%input payload application/json
%output application/json
%var data = "Hello I am from \"StackOverflow, Internet\""
---
data scan /\w++, \w++|\w++/ reduce ($$ ++ $)
Меня устраивает:
%dw 2.0
% выходного приложения / JSON
Карта полезной нагрузки ((payload01, indexOfPayload01) -> {accountType: payload01.accountType, address: payload01.street ++ payload01.city, country: payload01.country, creationDate: payload01.creationDate as: string, firstName: (payload01.name splitBy '') [0], id: payload01.accountID, lastName: (payload01.name splitBy '') [1], miles: payload01.miles, postal: payload01.postal})
Я добился этого в dataweave, создав пользовательскую функцию, которая вызывает функцию splitBy (). В приведенном ниже коде я разбираю имя, возвращаемое из базы данных, в имени и фамилии.
%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
}
Ссылаясь на документацию DataWeave, регулярные выражения определяются между / . Поэтому замените двойные кавычки " на / . Это должно быть так: /[^\s\"']+|\"([^\"]*)\"|'([^']*)'/
Другое дело, splitBy разбивает строку на массив отдельных элементов. Так что ожидаемого результата вы не получите. Действительно, полезная нагрузка будет разделена на 5 элементов, но ее содержимое будет пустым. Например: "a,b,c" splitBy ","
возвращает 3 элемента: «a» - «b» - «c», запятая / разделитель не является частью результата.
Чтобы получить ожидаемый результат, попробуйте использовать сканирование . Он возвращает массив со всеми совпадениями в данной строке. Возможно, вам следует соответствующим образом изменить регулярное выражение.
Используйте это выражение
% dw 1.0% output application / json% var splittedValue = 'Привет, я из Казани, Россия' // splitBy ""
SplittedValue splitBy ""
Похожие вопросы
Новые вопросы
mule
Mule - это легкая корпоративная сервисная шина на основе Java (ESB) и платформа интеграции, которая позволяет разработчикам быстро и легко соединять приложения, позволяя им обмениваться данными. Mule позволяет легко интегрировать существующие системы, независимо от различных технологий, используемых приложениями, включая JMS, веб-службы, JDBC, HTTP и другие.