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

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

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/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 では、インデックス付きモードで次の形式のみを読み取ることができます。

      CSV、JSON、XML (Mule 4.3.0 以降)

      DataWeave では、インデックス付きモードで Excel (XLSX) 入力を読み込むことは​できません​。

    • メモリ内:
      メモリ内でドキュメント全体を解析します。

      DataWeave では、メモリ内モードを使用して、サポートされるすべての形式を読み取ることができます。

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

    DataWeave では、次の形式でのみストリーミングがサポートされます。

    CSV、JSON、Excel (XLSX、Mule 4.2.2 以降)、XML (Mule 4.3.0)

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

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

場合によって、形式固有のプロパティを使用して、形式の各側面を変更または指定することが必要になることがあります。たとえば、​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 ライターから分離します。たとえば、'output applicatio:page-aliases を指定できます。

入力データの場合、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>

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

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