Показать страницуИстория страницыСсылки сюдаCopy this pageExport to MarkdownODT преобразованиеНаверх Вы загрузили старую версию документа! Сохранив её, вы создадите новую текущую версию с этим содержимым. Медиафайлы{{tag>language languages datawiave mule}} ===== DataWeave ===== <code dw> %dw 2.0 input payload json output application/java --- payload </code> <code dataweave> %dw 2.0 output application/dw --- payload </code> ==== dw::core::Arrays / Working with Array ==== * **countBy** Counts the elements in an array that return true when the matching function is applied to the value of each element. * **divideBy** Breaks up an array into sub-arrays that contain the specified number of elements. * **drop** Drops the first n elements. It returns the original array when n <= 0 and an empty array when n > sizeOf(array). * **dropWhile** Drops elements from the array while the condition is met but stops the selection process when it reaches an element that fails to satisfy the condition. * **every** Returns true if every element in the array matches the condition. * **firstWith** Returns the first element that satisfies the condition, or returns null if no element meets the condition. * **indexOf** Returns the index of the first occurrence of an element within the array. If the value is not found, the function returns -1. * **indexWhere** Returns the index of the first occurrence of an element that matches a condition within the array. If no element matches the condition, the function returns -1. * **join** Joins two arrays of objects by a given ID criteria. * **leftJoin** Joins two arrays of objects by a given ID criteria. * **outerJoin** Joins two array of objects by a given ID criteria. * **partition** Separates the array into the elements that satisfy the condition from those that do not. * **slice** Selects the interval of elements that satisfy the condition: from <= indexOf(array) < until * **some** Returns true if at least one element in the array matches the specified condition. * **splitAt** Splits an array into two at a given position. * **splitWhere** Splits an array into two at the first position where the condition is met. * **sumBy** Returns the sum of the values of the elements in an array. * **take** Selects the first n elements. It returns an empty array when n <= 0 and the original array when n > sizeOf(array). * **takeWhile** Selects elements from the array while the condition is met but stops the selection process when it reaches an element that fails to satisfy the condition. ==== dw::Core ==== === distinctBy === Выполняет итерацию по массиву и возвращает уникальные элементы в нем. DataWeave использует результат применения предоставленной лямбды в качестве критерия уникальности. Эта версия DifferentBy находит уникальные значения в массиве. Другие версии действуют на объект и обрабатывают нулевое значение. Эта функция полезна, когда вам нужно удалить повторяющиеся элементы из массива <code> %dw 2.0 output json --- payload distinctBy $.id </code> === filterObject === Оператор filterObject перебирает список пар ключ-значение в объекте и применяет выражение, которое возвращает только соответствующие объекты, отфильтровывая остальные из выходных данных. Выражение должно возвращать значение true или false. Если выражение возвращает true ключ, значение или индекс объекта, объект фиксируется в выходных данных. Если он возвращает false какой-либо из них, объект отфильтровывается из вывода. Если совпадений нет, выходной массив будет пустым. {{ :develop:f5f675_07446b0d77c8425e81b40ce33ebe0ec6_mv2.webp |}} Infix Notation: Long-Hand <code> { } filterObject (value, key, index) -> (condition) </code> Infix Notation: $ syntax <code> { } filterObject (condition with $, $$ , $$$ syntax) </code> Prefix Notation <code> filterOject({ }, (value, index) -> (condition)) </code> Filter Expression <code> { } [? (<boolean_expression>) ] </code> <code> %dw 2.0 output json --- payload filterObject (value, key, index) -> key == "age" </code> <code> %dw 2.0 output json --- payload filterObject (value, key, index) -> key~="age" </code> <code> %dw 2.0 output application/json var myObject = { str1 : "String 1", str2 : "String 2", str3 : null, str4 : "String 4", } --- myObject filterObject $ != null </code> <code> %dw 2.0 output application/json --- payload filterObject (value, key, index) -> ((value.ticker contains "GO")) </code> <code> Filter object by key %dw 2.0 output application/json --- payload filterObject (value, key, index) -> (((key as Number) mod 2) == 0) </code> <code> Filter object by index %dw 2.0 output application/json --- payload filterObject (value, key, index) -> (((index) mod 2) == 0) </code> <code> Filter object by value with $ syntax %dw 2.0 output application/json --- payload filterObject $ is Object </code> <code> %dw 2.0 output application/json --- payload filterO bject $ is Array </code> <code> Filter object by key with $$ syntax %dw 2.0 output application/json --- payload filterObject ((($$ as Number) mod 2) == 0) </code> <code> Filter object by index with $$$ syntax %dw 2.0 output application/json --- payload filterObject (($$$ mod 2) == 0) </code> <code> Filter object using the filter expression selector %dw 2.0 output application/json --- payload [?( $.ticker contains "GO" )] </code> === groupBy === Функция groupBy принимает список объектов [x1,…,xn] и некоторую функцию f. Затем она отображает f в списке, давая список объектов [f(x1),…,f(xn)], и использует эти значения для выполнения операции groupBy. Эта функция полезна для группировки элементов массива на основе некоторого значения, которое генерируется из каждого элемента массива. <code> %dw 2.0 output json --- payload groupBy (n, idx) -> isEven(n) </code> <code> %dw 2.0 output json --- payload groupBy (n, idx) -> n.dayOfWeek </code> <code> %dw 2.0 output application/json var user = {"firstName": "Manik", "lastName": "Magar", "Address Line1" : "Address line 1"} --- user groupBy ((value, key) -> if (key contains 'Name') "Names" else "Address") </code> === map === Функция карты используется для преобразования данных, содержащихся в массиве. Это делается путем перебора элементов массива и применения преобразования к каждому элементу. Результат преобразования собирается вместе и выводится в виде массива преобразованных элементов. Перебирает элементы массива и выводит результаты в новый массив. <code> %dw 2.0 output application/json --- { "candidatedetails": payload.employee map((item,index) -> { "fname":item.FirstName ++ " " ++ item.LastName }) } </code> <code> %dw 2.0 output json --- payload map (n, idx) -> n + 1 </code> <code> %dw 2.0 output json --- payload.items.*name map ( (item, index) -> {name: item} ) </code> <code> %dw 2.0 var myVar = [ { bookId: 101, title: "world history", price: "19.99" }, { bookId: 202, title: 'the great outdoors', price: "15.99" } ] var myVar2 = [ { bookId: 101, author: "john doe" }, { bookId: 202, author: "jane doe" } ] output application/json --- myVar map (item, index) -> using (id = item.bookId) { "id" : id, "topic" : item.title, "cost" : item.price as Number, (myVar2 filter ($.*bookId contains id) map (item) -> { author : item.author }) } </code> === mapObject === Функция mapObject используется для преобразования данных, содержащихся в объекте. Это делается путем перебора каждой пары ключ/значение в объекте и применения преобразования к каждому ключу и значению. Он принимает объект и лямбду, которая принимает 3 параметра: значение, ключ и индекс, и возвращает новый объект. Наконец, вся функция возвращает объект. <code> %dw 2.0 output application/json --- {"a":"b","c":"d"} mapObject (value,key,index) -> { (index) : { (value):key} } </code> <code> %dw 2.0 output json --- payload mapObject (value, key, index) -> { (upper(key)): value } </code> <code> %dw 2.0 output application/json var user = {"firstName": "Manik", "lastName": "Magar", "addressLine1" : "Address line 1"} var userList = [{"firstName": "Manik", "lastName": "Magar", "addressLine1" : "Address line 1"}, {"firstName": "Om", "lastName": "Magar", "addressLine1" : "Address line 2"} ] --- { mapObject: user mapObject (value:String, key:Key, index:Number) -> { '$key-$index': value }, pluck: user pluck (value, key, index) -> (key ++ '-' ++ index ++ '-' ++ value), filter: user filterObject ((value, key, index) -> (index < 1)), filter2: userList filter ((value, index) -> (index < 1)), groupBy1 : user groupBy (value, key) -> key endsWith 'Name', groupBy2 : userList groupBy ((value, index) -> value.lastName) } </code> === reduce === Функция уменьшения используется для выполнения любых вычислений во время итерации массива, поэтому результат вычислений не теряется во время итерации. Для каждого элемента входного массива по порядку сокращение применяет лямбда-выражение (функцию) сокращения, а затем заменяет аккумулятор новым результатом. Лямбда-выражение может использовать как текущий элемент входного массива, так и текущее значение аккумулятора. <code> %dw 2.0 output json --- payload reduce (n, total) -> total + n </code> <code> %dw 2.0 output application/json --- [2, 3] reduce ($ + $$) Here [2,3] – is the input array acc -> $$ will take the 1st item value = 2 (as acc is not initialized) $ will take the 2nd item value = 3 (as acc is not initialized) Loop count = no of item in array minus 1 (as acc is not initialized) = 2 – 1 = 1 Acc = ($=3 + $$=2) = 5 So result will be 5 </code> <code> %dw 2.0 output application/json --- [2,3] reduce ((item, acc = 4) -> acc + item) Here [2,3] – is the input array acc will take the initialized value = 4 item will take 1st item value = 2 (as acc is initialized) Loop count = no of item in array (as acc is initialized) = 2 Acc = acc + item -> 4 + 2 -> 6 Acc = acc + item -> 6 + 3 -> 9 So result will be 9 </code> ==== Working with Objects / dw::core::Objects ==== * **divideBy** Breaks up an object into sub-objects that contain the specified number of key-value pairs. * **entrySet** Returns an array of key-value pairs that describe the key, value, and any attributes in the input object. * **everyEntry** Returns true if every entry in the object matches the condition. * **keySet** Returns an array of key names from an object. * **mergeWith** Appends any key-value pairs from a source object to a target object. * **nameSet** Returns an array of keys from an object. * **someEntry** Returns true if at least one entry in the object matches the specified condition. * **takeWhile** Selects key-value pairs from the object while the condition is met. * **valueSet** Returns an array of the values from key-value pairs in an object. ====== Ссылки ====== * https://docs.mulesoft.com/dataweave/latest/СохранитьПросмотрРазличияОтменить Сводка изменений Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии: CC0 1.0 Universal