Flex Gateway新着情報
Governance新着情報
Monitoring API Manager
DataWeave 2.1 は Mule 4.1 と互換性があります。 Mule 4.1 の標準サポートは 2020 年 11 月 2 日に終了しました。このバージョンの Mule は、拡張サポートが終了する 2022 年 11 月 2 日にそのすべてのサポートが終了します。 このバージョンの Mule を使用する CloudHub には新しいアプリケーションをデプロイできなくなります。許可されるのはアプリケーションへのインプレース更新のみになります。 標準サポートが適用されている最新バージョンの Mule 4 にアップグレードすることをお勧めします。これにより、最新の修正とセキュリティ機能強化を備えたアプリケーションが実行されます。 |
DataWeave バージョン 2 は、いくつかの数学演算子、等価演算子、比較演算子、論理演算子、先頭追加演算子、追加演算子をサポートしています。
DataWeave バージョン 2 は、ほとんどの一般的な数学演算子をサポートしています。
演算子 | 説明 |
---|---|
|
加算 |
|
乗算 |
|
除算 |
次の例では、数学演算子を使用しています。
%dw 2.0
output application/json
---
{ "math" : [
{ "2 + 2" : (2 + 2) },
{ "2 - 2" : (2 - 2) },
{ "2 * 2" : (2 * 2) },
{ "2 / 2" : (2 / 2) }
]
}
"math": [
{ "2 + 2": 4 },
{ "2 - 2": 0 },
{ "2 * 2": 4 },
{ "2 / 2": 1.0 }
]
}
DataWeave バージョン 2 は、次の等価演算子と比較演算子をサポートしています。
演算子 | 説明 |
---|---|
|
次の値より小さい。 |
|
次の値より大きい。 |
|
次の値以下。 |
|
次の値以上。 |
|
次の値と等しい。 |
|
値の型が異なる場合、等価演算子は、1 つの値をもう 1 つの値の型に強制変換しようとします。 |
論理演算子 not
を使用することで、これらの演算子を否定することができます。
次の例では、比較演算子を使用しています。
%dw 2.0
output application/json
---
{ "relational" : [
{ "1 < 1" : (1 < 1) },
{ "1 > 2" : (1 > 2) },
{ "1 <= 1" : (1 <= 1) },
{ "1 >= 1" : (1 >= 1) }
]
}
{ "relational": [
{ "(1 < 1)": false },
{ "(1 > 2)": false },
{ "(1 <= 1)": true },
{ "(1 >= 1)": true }
]
}
比較演算子のオペランドの型が異なる場合は、DataWeave は右側のオペランドを左側のオペランドの方に強制変換します。
たとえば、式 "123" > 12
では、12
(数値型) が "12"
(文字列型) に強制変換され、各文字列値が辞書的順序で比較されます。
式 123 > "12"
では、文字列値 "12"
が数値 12
に強制変換され、数値が比較されます。
次の例では、等価演算子を使用しています。
%dw 2.0
output application/dw
---
{ "equality" :
[
(1 == 1),
(1 == 2),
("true" == true),
("true" ~= true),
(['true'] ~= [true]),
('1' ~= 1)
]
}
{
equality: [ true, false, false, true, true, true ]
}
次の論理演算子がサポートされています。
演算子 | 説明 |
---|---|
|
入力の結果を否定します。 |
|
すべての入力の結果が true の場合は |
|
いずれかの入力の結果が true の場合は |
次の例は、これらの演算子の使用方法を示しています。
%dw 2.0
output application/json
var myArray = [1,2,3,4,5]
var myMap = myArray map not (($ mod 2) == 0)
---
{
"not" : [
"notTrue" : not true,
"notFalse" : not false,
"myMapWithNot" : myMap
],
"and" : [
"andTrueFalse" : true and false,
"andIsTrue" : (1 + 1 == 2) and (2 + 2 == 4),
"andIsFalse" : (1 + 1 == 2) and (2 + 2 == 2)
],
"or" : [
"orTrueFalse" : true or false,
"orIsTrue" : (1 + 1 == 2) or (2 + 2 == 2),
"orIsFalse" : (1 + 1 == 1) or (2 + 2 == 2)
]
}
myMap
はリスト (myArray
) 内の項目を反復処理し、剰余 (mod
) 式が各項目に適用されたときに 0
と評価されないかどうかを決定します。
{
"not": [
{ "notTrue": false },
{ "notFalse": true },
{ "myMapWithNot": [ true, false, true, false, true ] }
],
"and": [
{ "andTrueFalse": false },
{ "andIsTrue": true },
{ "andIsFalse": false }
],
"or": [
{ "orTrueFalse": true },
{ "orIsTrue": true },
{ "orIsFalse": false }
]
}
not
は not (true)
のような式では機能しますが、not(true)
(スペースなし) では機能しないことに注意してください。
論理演算子は組み合わせて使用することができます。次の例では、orNot
式で or not
を、andNot
式で and not
を、notWithAndNot
式で not
と and not
を使用しています。
%dw 2.0
output application/json
var orNot = if (1 + 1 == 4 or not 1 == 2) {"answer": "foo"}
else {"answer": "nope"}
var andNot = if (1 + 1 == 2 and not 1 == 2) {"answer": "bar"}
else {"answer": "nope"}
var notWithAndNot = if (not (1 + 1 == 2 and not 1 == 1)) {"answer": "foobar"}
else {"answer": "nope"}
---
{ "answers" :
[
orNot,
andNot,
notWithAndNot
]
}
{
"answers": [
{ "answer": "foo" },
{ "answer": "bar" },
{ "answer": "foobar" }
]
}
DataWeave バージョン 2 は、配列内に項目を追加および先頭に追加する演算子をサポートしています。
演算子 | 説明 |
---|---|
|
演算子の左側のデータを右側の配列内の項目の先頭に追加します。たとえば、 |
|
演算子の右側のデータを左側の配列内の項目に追加します。たとえば、 |
|
演算子の右側のデータを左側の配列内の項目に追加します。たとえば、 |
次の例は、これらの演算子の使用方法を示しています。
%dw 2.0
output application/json
---
{
"prepend-append" : [
// Array on right side when prepending.
{ "prepend" : 1 >> [2] },
{ "prepend-number" : 1 >> [1] },
{ "prepend-string" : "a" >> [1] },
{ "prepend-object" : { "a" : "b"} >> [1] },
{ "prepend-array" : [1] >> [2, 3] },
{ "prepend-binary" : (1 as Binary) >> [1] },
{ "prepend-date-time" : |23:57:59Z| >> [ |2017-10-01| ] },
// Array is on left side when appending.
{ "append-number" : [1] << 2 },
{ "append-string" : [1] << "a" },
{ "append-object" : [1] << { "a" : "b"} },
{ "append-array" : [1,2] << [1, 2, 3] },
{ "append-binary" : [1] << (1 as Binary) },
{ "append-date-time" : [ |2017-10-01| ] << |23:57:59Z| },
{ "append-object-to-array" : [1,2] << {"a" : "b"} },
{ "append-array-to-array1" : ["a","b"] << ["c","d"] },
{ "append-array-to-array2" : [["a","b"],["c","d"]] << ["e","f"] },
// + always appends within the array
{ "append-with-+" : [1] + 2 },
{ "append-with-+" : [2] + 1 }
]
}
{
"prepend-append": [
{ "prepend": [ 1, 2 ] },
{ "prepend-number": [ 1, 1 ] },
{ "prepend-string": [ "a", 1 ] },
{ "prepend-array": [ [ 1 ], 2, 3 ] },
{ "prepend-object": [ { "a": "b" }, 1 ] },
{ "prepend-binary": [ "\u0001", 1 ] },
{ "prepend-date-time": [ "23:57:59Z", "2017-10-01" ] },
{ "append-number": [ 1, 2 ] },
{ "append-string": [ 1, "a" ] },
{ "append-object": [ 1, { "a": "b" } ] },
{ "append-array": [ 1, 2, [ 1, 2, 3 ] ] },
{ "append-binary": [ 1, "\u0001" ] },
{ "append-date-time": [ "2017-10-01", "23:57:59Z" ] },
{ "append-object-to-array": [ 1, 2, { "a": "b" } ] },
{ "append-array-to-array1": [ "a", "b", ["c","d"] ] },
{ "append-array-to-array2": [ ["a","b"], ["c","d"], ["e","f"] ] },
{ "append-with-+": [ 1, 2] },
{ "append-with-+": [ 2, 1] }
]
}