サポートされるデータ形式

DataWeave では、JSON、XML など、多くの種別のデータ形式を読み書きできます。 開始する前に、Mule 4 アプリケーションでは DataWeave のバージョン 2.x が使用されることに注意してください。Mule 3 アプリケーションでの DataWeave については、​DataWeave バージョン 1.2 のドキュメント​を参照してください。 他の Mule バージョンの場合は、DataWeave の目次のバージョンセレクターを使用できます。

DataWeave では、次の形式が入力および出力としてサポートされています。

MIME タイプ ID サポートされる形式

application/avro

avro

Avro 形式

application/csv

csv

CSV 形式

application/dw

dw

DataWeave 式をテストするための ​DataWeave 形式 (dw)

application/flatfile

flatfile

フラットファイル形式​、​COBOL コピーブック形式​、​固定幅形式

application/java

java

Java 形式​、​Java の Enum 形式

application/json

json

JSON 形式

application/octet-stream

binary

バイナリ形式

application/protobuf​、​application/x-protobuf

protobuf

Protobuf 形式

application/xlsx

excel

Excel 形式

application/xml

xml

XML 形式​、​CData カスタム型

application/x-ndjson

ndjson

改行区切りの JSON 形式 (ndjson)

application/x-www-form-urlencoded

urlencoded

URL エンコード形式

application/yaml

yaml

YAML 形式

multipart/form-data

multipart

マルチパート形式

text/plain

text

テキスト/プレーン形式

text/x-java-properties

properties

テキスト Java プロパティ

DataWeave リーダー

DataWeave は、メモリに読み込むか、ローカルストレージでインデックス付けすることで入力データ全体を読み取ることができます。データ形式によっては、入力をストリーミングし、データを分割して順次読み取ることもできます。インデックス付き読み取り戦略では、大きなファイルを処理するときのメモリ不足の問題を回避するメカニズムを実装します。ストリーミング戦略ではパフォーマンスを改善できますが、読み取られてメモリに保存されているファイルの部分にしかアクセスできないため、ファイルアクセスは順次アクセスに限られます (ランダムアクセスは許可されません)。

読み取り戦略 説明 サポートされる形式

メモリ内

この戦略ではドキュメント全体を解析してメモリに読み込み、データへのランダムアクセスを可能にします。この戦略を使用すると、DataWeave スクリプトで結果値の任意の部分にいつでもアクセスできます。

この戦略ではサポートされるすべての形式を読み取ることができます。

インデックス付き

この戦略ではドキュメント全体を解析し、ディスクスペースを使用して大きなファイルのメモリ不足の問題を回避して、データへのランダムアクセスを可能にします。この戦略を使用すると、DataWeave スクリプトで結果値の任意の部分にいつでもアクセスできます。

サイズが 1.5 MB を超える ​String​ を処理する場合、DataWeave は自動的に値を複数のチャンクに分割してメモリ不足の問題を回避します。この機能は ​JSON​ および ​XML​ 入力データでのみ機能します。

詳細は、​「DataWeave のインデックス付きリーダー」​を参照してください。

  • CSV

  • JSON

  • XML

ストリーミング

この戦略では、入力ドキュメントを小さな項目に分割し、データに順次アクセスして、現在の項目をメモリ内に保存します。DataWeave セレクターは、読み取られているファイルの部分にのみアクセスできます。

詳細は、​「DataWeave のストリーミング」​を参照してください。

  • CSV

  • JSON

  • Excel​ (XLSX)

  • XML

リーダーとライターのプロパティの使用

場合によって、形式固有のプロパティを使用して、形式の各側面を変更または指定することが必要になることがあります。たとえば、​separator​ (または区切り文字) など、CSV ファイルで使用する、CSV の入力および出力プロパティを指定できます。 Cobol コピーブックでは、​schemaPath​ プロパティを使用して、スキーマファイルへのパスを指定する必要があります。

Mule アプリケーション内の特定のコンポーネントの MIME タイプ (​outputMimeType​) 属性にリーダープロパティを追加できます。Listeners および Read 操作ではこの設定が受け入れられます。たとえば、この新規ファイルリスナーの例では、CSV 入力ファイルの ​,​ 区切り文字を識別します。

例: CSV リーダーのプロパティ
<file:listener doc:name="On New File" config-ref="File_Config" outputMimeType='application/csv; separator=","'>
  <scheduling-strategy >
    <fixed-frequency frequency="45" timeUnit="SECONDS"/>
  </scheduling-strategy>
  <file:matcher filenamePattern="comma_separated.csv" />
</file:listener>

上記の ​outputMimeType​ 設定は、ライターではなく CSV ​リーダー​が ​comma_separated.csv​ 入力ファイルの形式と区切り文字を解釈するのに役立ちます。

出力形式を指定するには、File Write 操作で使用する CSV または JSON ライターなど、ライターの MIME タイプと任意のライタープロパティを提供できます。たとえば、CSV 出力のペイロードで、入力で使用する他の区切り文字ではなくパイプ (​|​) 区切り文字を記述しなければならない場合があります。これを行うには、プロパティとその値を DataWeave 式の ​output​ ディレクティブに追加します。たとえば、次の Write 操作ではパイプを ​separator​ として指定しています。

例: CSV ライターの出力ディレクティブ
<file:write doc:name="Write" config-ref="File_Config" path="my_transform">
  <file:content ><![CDATA[#[output application/csv separator="|" --- payload]]]></file:content>
</file:write>

次の例は、​output​ ディレクティブで 2 つのライタープロパティを指定する DataWeave スクリプトを示しています。1 つは CSV 項目の区切り文字用で、もう 1 つはヘッダーがないことを示します。

%dw 2.0
output application/csv separator=";", header=false
---
payload

ライタープロパティは形式によって異なります。次の例では、JSON ライタープロパティ ​skipNullOn​ を使用します。

%dw 2.0
output application/json skipNullOn="everywhere"
---
payload

次の例では、DataWeave スクリプトが非表示の ASCII 文字を CSV 出力の区切り文字として使用しています。区切り文字のプロパティ値は ​\u001E​ です。​\u​ はエスケープシーケンス表現で、​001E​ はレコード区切り文字 (RS) である ASCII 文字の 16 進表現です。

%dw 2.0
output application/csv separator = "\u001E"
---
[
	{
		"Name" : "Tom",
		"UID" : 2569,
		"ShipOrderID" : "ui-288188"
	},
	{
		"Name" : "Alan",
		"UID" : 7756,
		"ShipOrderID" : "xj-232142"
	},
	{
		"Name" : "Dan",
		"UID" : 7821,
		"ShipOrderID" : "uk-259459"
	}
]

この CSV の例では次の出力が生成されます。

NameUIDShipOrderID
Tom2569ui-288188
Alan7756xj-232142
Dan7821uk-259459

read​ または ​readUrl​ メソッドを使用するスクリプトでは、​readerProperties​ パラメーターを介してリーダープロパティを指定することもできます。​「read」​の例を参照してください。ただし、​CSV リーダーの例​に示されるように、リーダープロパティは HTTP リスナーなどのメッセージソースでより一般的に使用されます。

Mule 変数を設定プロパティの値として使用することもできます。他の完全な例は、​「リーダーとライターの設定プロパティの設定」​を参照してください。

MIME タイプの設定

Mule アプリケーションを流れる入力および出力データで MIME タイプを指定できます。

DataWeave 変換の場合、出力データで MIME タイプを指定できます。 たとえば、Transform Message コンポーネントまたは Write 操作内の式の ​output​ ヘッダーディレクティブを ​output application/json​ または ​output application/csv​ に設定できます。

この例では、File Write 操作を使用して MIME タイプを設定し、形式固有のライター (CSV ライター) がペイロードを CSV 形式で出力するようにします。

例: CSV ライターの MIME タイプ
<file:write doc:name="Write" config-ref="File_Config" path="my_transform">
  <file:content ><![CDATA[#[output application/csv --- payload]]]></file:content>
</file:write>

Mule 4.3.0 以降、MIME タイプの代わりに形式 ID のみを使用して ​output​ ディレクティブを設定できます。たとえば、Transform Message コンポーネントまたは Write 操作内の式の ​output​ ヘッダーディレクティブを ​output json​ または ​output csv​ に設定できます。また、形式 ID を使用して、出力ヘッダーで出力データの形式と MIME タイプを区別したり、カスタム MIME タイプを使用したりできます。 たとえば、DataWeave ディレクティブ ​output application/problem+json with json​ を使用して、JSON データを書き込むことはできますが、MIME タイプを ​application/problem+json​ にカスタマイズすることはできません。 スクリプトの MIME タイプ出力をカスタマイズする例については、​「スクリプトの MIME タイプ出力の変更」​を参照してください。

with​ キーワードは、出力 MIME タイプをスクリプトの出力の DataWeave ライターから分離します。たとえば、​binary​ ライターを使用する場合、「output application/csv with binary」を指定して、​application/csv​ MIME タイプを出力します。この設定は、​動的ライタープロパティの使用 and Use Reader and Writer Properties in DataWeave Functions​で示されている事例で必要です。また、ユースケース ​output application/my-custom-type with json indent=false​ などで、ライタープロパティを追加することもできます。

入力データの場合、Mule ソースの形式固有のリーダー (新規ファイルリスナーなど)、Mule 操作 (Read、HTTP Request 操作など)、および DataWeave 式では、Mule イベントの入力ペイロード、属性、および変数に関連付けられるメタデータから MIME タイプが推定されます。MIME タイプをメタデータから推定できない場合 (およびそのメタデータが静的でない場合)、Mule ソースおよび操作では、リーダーの MIME タイプを指定することができます。たとえば、新規ファイルリスナーの MIME タイプを CSV ファイルの​入力​用の ​outputMimeType='application/csv'​ に設定できます。この設定では、ファイル形式に関する情報が CSV リーダーに提供されます。

例: CSV リーダーの MIME タイプ
<file:listener doc:name="On New File"
  config-ref="File_Config"
  outputMimeType='application/csv'>
</file:listener>

形式間の変換を実行するのにリーダー設定は使用​されません​。リーダー設定は、リーダーが入力の形式を解釈できるようサポートするのみです。

また、ソース、操作、またはコンポーネントの形式固有のリーダーまたはライターで使用する、リーダーとライターの特別なプロパティを設定することもできます。 「​リーダーとライターのプロパティの使用​」を参照してください。