Это старая версия документа!
DataWeave
%dw 2.0 input payload json output application/java --- payload
%dw 2.0 output application/dw --- payload
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 находит уникальные значения в массиве. Другие версии действуют на объект и обрабатывают нулевое значение.
Эта функция полезна, когда вам нужно удалить повторяющиеся элементы из массива
%dw 2.0 output json --- payload distinctBy $.id
filterObject
Оператор filterObject перебирает список пар ключ-значение в объекте и применяет выражение, которое возвращает только соответствующие объекты, отфильтровывая остальные из выходных данных. Выражение должно возвращать значение true или false. Если выражение возвращает true ключ, значение или индекс объекта, объект фиксируется в выходных данных. Если он возвращает false какой-либо из них, объект отфильтровывается из вывода. Если совпадений нет, выходной массив будет пустым.
Infix Notation: Long-Hand
{ } filterObject (value, key, index) -> (condition)
Infix Notation: $ syntax
{ } filterObject (condition with $, $$ , $$$ syntax)
Prefix Notation
filterOject({ }, (value, index) -> (condition))
Filter Expression
{ } [? (<boolean_expression>) ]
%dw 2.0 output json --- payload filterObject (value, key, index) -> key == "age"
%dw 2.0 output json --- payload filterObject (value, key, index) -> key~="age"
%dw 2.0
output application/json
var myObject = {
str1 : "String 1",
str2 : "String 2",
str3 : null,
str4 : "String 4",
}
---
myObject filterObject $ != null
%dw 2.0 output application/json --- payload filterObject (value, key, index) -> ((value.ticker contains "GO"))
Filter object by key %dw 2.0 output application/json --- payload filterObject (value, key, index) -> (((key as Number) mod 2) == 0)
Filter object by index %dw 2.0 output application/json --- payload filterObject (value, key, index) -> (((index) mod 2) == 0)
Filter object by value with $ syntax %dw 2.0 output application/json --- payload filterObject $ is Object
%dw 2.0 output application/json --- payload filterO bject $ is Array
Filter object by key with $$ syntax %dw 2.0 output application/json --- payload filterObject ((($$ as Number) mod 2) == 0)
Filter object by index with $$$ syntax %dw 2.0 output application/json --- payload filterObject (($$$ mod 2) == 0)
Filter object using the filter expression selector %dw 2.0 output application/json --- payload [?( $.ticker contains "GO" )]
groupBy
Функция groupBy принимает список объектов [x1,…,xn] и некоторую функцию f. Затем она отображает f в списке, давая список объектов [f(x1),…,f(xn)], и использует эти значения для выполнения операции groupBy. Эта функция полезна для группировки элементов массива на основе некоторого значения, которое генерируется из каждого элемента массива.
%dw 2.0 output json --- payload groupBy (n, idx) -> isEven(n)
%dw 2.0 output json --- payload groupBy (n, idx) -> n.dayOfWeek
%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")
map
Функция карты используется для преобразования данных, содержащихся в массиве. Это делается путем перебора элементов массива и применения преобразования к каждому элементу. Результат преобразования собирается вместе и выводится в виде массива преобразованных элементов.
Перебирает элементы массива и выводит результаты в новый массив.
%dw 2.0
output application/json
---
{
"candidatedetails": payload.employee map((item,index) -> {
"fname":item.FirstName ++ " " ++ item.LastName
})
}
%dw 2.0 output json --- payload map (n, idx) -> n + 1
%dw 2.0
output json
---
payload.items.*name map (
(item, index) -> {name: item}
)
%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
})
}
mapObject
Функция mapObject используется для преобразования данных, содержащихся в объекте. Это делается путем перебора каждой пары ключ/значение в объекте и применения преобразования к каждому ключу и значению. Он принимает объект и лямбду, которая принимает 3 параметра: значение, ключ и индекс, и возвращает новый объект. Наконец, вся функция возвращает объект.
%dw 2.0
output application/json
---
{"a":"b","c":"d"} mapObject (value,key,index) -> { (index) : { (value):key} }
%dw 2.0
output json
---
payload mapObject (value, key, index) -> {
(upper(key)): value
}
%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)
}
reduce
Функция уменьшения используется для выполнения любых вычислений во время итерации массива, поэтому результат вычислений не теряется во время итерации. Для каждого элемента входного массива по порядку сокращение применяет лямбда-выражение (функцию) сокращения, а затем заменяет аккумулятор новым результатом. Лямбда-выражение может использовать как текущий элемент входного массива, так и текущее значение аккумулятора.
%dw 2.0 output json --- payload reduce (n, total) -> total + n
%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
%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
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.
