DataWeave の型

DataWeave は、配列、ブール、オブジェクト、日付、日時を含め、さまざまな型のデータで動作します。DataWeave が提供する型はモジュールにバンドルされ、モジュールにも、関連する関数が含まれます。

dw::Core モジュール内の型 (Core 型) は、Core モジュールをインポートしなくても使用できます。他のモジュールについては、モジュールをインポートしてその関数と型を使用できるようにする必要があります。

このトピックでは、以下を含め、いくつかの DataWeave 型の概要および一般的なパターンについて説明します。

Array (配列) (dw::Core 型)

配列には、サポートされるすべての型の要素を保持できます。配列の例を次に示します。

例: DataWeave 配列
%dw 2.0
output application/json
var x = "words"
---
[ "My", "three", x ]

条件付き要素

配列では、条件に基づいて表示する (または表示しない) 要素を定義できます。

条件付き要素は、次の例のように、(value) if condition の形式をとります。

例: if 条件
%dw 2.0
output application/json
---
[(1) if true, (2) if false]
出力
[1]

Boolean (ブール) (dw::Core 型)

Boolean は、キーワード true および false によって定義されます。

CData (dw::Core 型)

XML では、CData という名前のカスタム型を定義します。これは String を継承し、拡張します。これを使用して、CDATA XML ブロックを識別します。CDATA 内でコンテンツをラップするか、CDATA ブロック内に入力文字列が到達したかどうかを確認するように、これを使用してライターに指示することができます。

変換
%dw 2.0
output application/xml encoding="UTF-8"
---
{
  users:
  {
    user : "Mariano" as CData,
    age : 31 as CData
  }
}
出力
<?xml version="1.0" encoding="UTF-8"?>
<users>
  <user><![CDATA[Mariano]]></user>
  <age><![CDATA[31]]></age>
</users>

日時 (dw::Core 型)

DataWeave の日付は ISO-8601 標準に従い、リテラルは | 文字の間に定義されます。

この言語には次のネイティブの日付型があります。

  • Date

  • DateTime

  • LocalDateTime

  • LocalTime

  • Period

  • Time

  • TimeZone

Date (日付)

YearMonth、および Day で表され、|yyyy-MM-dd| として指定される DateDate 型に Time コンポーネントはありません。

|2003-10-01|

DateTime

タイムゾーン内の日付と時刻。これは Date + Time + TimeZone を接続したものです。

|2003-10-01T23:57:59-03:00|

LocalDateTime

現在の TimeZone 内の DateTime

|2003-10-01T23:57:59|

LocalTime

現在の TimeZone 内の Time

Period (期間)

期間には次の形式があります。

  • P[n]Y[n]M[n]DT[n]H[n]M[n]S

  • P<date>T<time>`

[n] は、[n] の後の各日時要素の値で置き換えられます。

P は、期間表現の先頭に配置する期間の指定子です。

  • Y は年指定子です (例: |P1Y|)

  • M は月指定子です (例: |P1M|)

  • D は日指定子です (例: |P1D|)

T は、表現の Time コンポーネントの前に配置される時刻の指定子です。

  • H は時指定子です (例: |PT1H|)

  • M は分指定子です (例: |PT1M|)

  • S は秒指定子です (例: |PT1S|)

変換
%dw 2.0
output application/json
---
a: |20:00:00| + |PT1M1S|
出力
{
  "a": "20:01:01"
}

Time (時刻)

特定の TimeZone 内の時刻。|HH:mm:ss.SSS| として指定されます。

|23:59:56|

TimeZone

グリニッジ標準時 (GMT) を基準とする相対的な TimeTimeZone には + または - を含める必要があります。たとえば、|03:00| は時刻ですが、|+03:00|TimeZone です。

|-08:00|

日付複合

日付の各部分にアクセスするには、特別なセレクタを使用する必要があります。

変換
%dw 2.0
output application/json
var myDate = |2003-10-01T23:57:59.700-03:00|
---
{
  year: myDate.year,
  month: myDate.month,
  day: myDate.day,
  hour: myDate.hour,
  minutes: myDate.minutes,
  seconds: myDate.seconds,
  milliseconds: myDate.milliseconds,
  nanoseconds: myDate.nanoseconds,
  quarter: myDate.quarter,
  dayOfWeek: myDate.dayOfWeek,
  dayOfYear: myDate.dayOfYear,
  offsetSeconds: myDate.offsetSeconds
}
出力
{
  "year": 2003,
  "month": 10,
  "day": 1,
  "hour": 23,
  "minutes": 57,
  "seconds": 59,
  "milliseconds": 700,
  "nanoseconds": 700000000,
  "quarter": 4,
  "dayOfWeek": 3,
  "dayOfYear": 274,
  "offsetSeconds": -10800
}

日付の形式の変更

以下の方法で as を使用することで、必要な形式で日付を指定できます。

変換
%dw 2.0
output application/json
---
formattedDate: |2003-10-01T23:57:59| as String {format: "yyyy-MM-dd"}
出力
{
  "formattedDate": "2003-10-01"
}

複数の似た変換を実行する場合、ヘッダーでカスタム型をディレクティブとして定義し、各日付をその型として設定することをお勧めします。

変換
%dw 2.0
output application/json
type Mydate = String { format: "yyyy/MM/dd" }
---
{
  formattedDate1: |2003-10-01T23:57:59| as Mydate,
  formattedDate2: |2015-07-06T08:53:15| as Mydate
}
出力
{
  "formattedDate1": "2003/10/01",
  "formattedDate2": "2015/07/06"
}

型名は大文字と小文字を区別します。

Enum (列挙) (dw::Core 型)

この型は Enum Java クラスに基づきます。 これは、次の例で示されているように、クラスの完全な Java クラス名を指定する class プロパティと共に常に使用する必要があります。

変換
%dw 2.0
output application/java
---
"Male" as Enum {class: "com.acme.GenderEnum"}

Iterator (イテレータ) (dw::Core 型)

Iterator 型は、配列を反復処理する Iterator Java クラスに基づきます。Iterator には、コレクションが含まれるほか、コレクションを反復処理し、絞り込むための方法が含まれます。

Java クラスと同様に、イテレータは 1 回のみコンシュームされるように設計されています。たとえば、この値をロガーに渡すと、値がコンシュームされ、フロー内の以降の要素でこの値を読み取れなくなります。

Number (数値) (dw::Core 型)

浮動小数点数値および整数値の両方をサポートする 1 つの数値型のみがあります。どの操作でも精度が失われることはありません。エンジンは、精度を損なわない最も効率の良い方法でデータを常に保存します。

Object (オブジェクト) (dw::Core 型)

任意のオブジェクトを key:value ペアとして表します。

%dw 2.0
output application/json
---
{
  name: "Annie"
}

単一値オブジェクト

オブジェクトに 1 つの key:value ペアのみが含まれる場合、中括弧 { } で囲む必要はありません。

%dw 2.0
output application/json
---
name: "Annie"

条件付き要素

オブジェクトでは、条件式に基づいて条件付きのキー-値ペアを定義できます。条件付き要素は、(key:value) if 条件の形式をとります。

%dw 2.0
output application/xml encoding="UTF-8"
---
file: {
  name: "transform",
  (extension: "zip") if payload.fileSystem?
}

この例では、ペイロードに fileSystem プロパティが存在する場合のみ、「extension」と呼ばれる追加の項目が出力されます (この項目は true だけでなく任意の値を含むことができます)。

<?xml version="1.0" encoding="UTF-8"?>
<file>
  <name>transform</name>
  <extension>zip</extension>
</file>

存在しない場合:

<?xml version="1.0" encoding="UTF-8"?>
<file>
  <name>transform</name>
</file>

動的キー

式を介してキーを指定するには、括弧で式をラップする必要があります。

変換
%dw 2.0
output application/json
var dynamicKey = "language"
---
{
  (dynamicKey): "Data Weave"
}
出力
{
  "language": "Data Weave"
}

動的要素

動的要素を使用すると、式の結果をオブジェクトの key:value ペアとして追加できます。この式は object または array of objects のどちらかである必要があります。

変換
%dw 2.0
output application/json
var x = [
  {b: "b"},
  {c: "c", d: "d"}
]
var y = {e: "e"}
---
{
  a: "a",
  (x),
  (y)
}
_括弧_  内の式 (`(x)` など。`x` はヘッダーに表示される変数) はオブジェクトの配列を返す必要があることに注意することが重要です。この配列内のすべてのオブジェクトがマージされます。これらのオブジェクトは、含まれているオブジェクトともマージされます。出力は次のようになります。
出力
{
  "a": "a",
  "b": "b",
  "c": "c",
  "d": "d",
  "e": "e"
}

条件付き XML 属性

条件に基づいて特定の XML 属性のみを出力に含めなければならない場合があります。条件付き要素は、「(key:value) if」条件の形式をとります。

変換
%dw 2.0
output application/xml
---
{
  name @(
    (company: "Acme") if false,
    (transform: "Anything") if true
  ): "DataWeave"
}
出力
<?xml version='1.0' encoding='US-ASCII'?>
<name transform="Anything">DataWeave</name>

動的 XML 属性

キー-値ペアの変更セットを特定の場所に XML 属性として含めなければならない場合があります。

入力
{
  "company": "Mule",
  "product": "DataWeave"
}
変換
%dw 2.0
output application/xml
---
transformation @((payload)): "Transform from anything to anything"
出力
<?xml version='1.0' encoding='US-ASCII'?>
<transformation company="Mule" product="DataWeave">Transform from anything to anything</transformation>

Regex (正規表現) (dw::Core 型)

正規表現は / の間に定義されます。たとえば、/\d+/ は 0 ~ 9 の複数の数字を表します。文字列に対してアクションを実行する特定の操作 (Matches、Replace など) や、オブジェクトや配列に対してアクションを実行する操作 (絞り込みなど) で、これを引数として使用できます。

String (文字列) (dw::Core 型)

二重引用符または単一引用符を使用して文字列を定義できます。

{
  doubleQuoted: "Hello",
  singleQuoted: 'Hello',
}

文字列補間

文字列補間を使用すると、変数または式を文字列に直接埋め込むことができます。式は括弧で囲む必要があります ($( <expression> ))。また、式は常に String (文字列) 型を返すか、String (文字列) に強制的に変換できるものを返す必要があります。

変換
%dw 2.0
output application/json
var name = "Shoki"
---
{
    Greeting: "Hi, my name is $name",
    Sum: "1 + 1 = $(1 + 1)"
}
出力
{
  "Greeting": "Hi, my name is Shoki",
  "Sum": "1 + 1 = 2"
}

TryResult (dw::Runtime 型)

デリゲートを評価し、結果またはエラーメッセージと共にオブジェクトを返します。try の例を参照してください。成功した TryResult には result 項目と truesuccess 値が含まれます。失敗した TryResult には error 項目と falsesuccess 値が含まれます。

定義
{
  success: Boolean,
  result?: T,
  error?: {
    kind: String,
    message: String,
    stack?: Array<String>,
    location?: String
  }
}

データ型の詳細に関するドキュメントは、モジュールリファレンスページで見つけることができます。

Was this article helpful?

💙 Thanks for your feedback!