XML から JSON への変換

これらのシンプルな DataWeave の例では XML 入力を JSON 出力に正常に変更します。通常、複雑な変換では ​map​ または ​mapObject​ 関数を使用する必要があります。 開始する前に、DataWeave バージョン 2 (​%dw 2.0​) は Mule 4 アプリケーションを対象とすることに注意してください。Mule 3 アプリケーションの場合、Mule 3.9 ドキュメントセットの DataWeave バージョン 1 (​%dw 1.0​) の例を参照してください。他の Mule バージョンの場合は、目次の Mule Runtime バージョンセレクターを使用できます。

次の DataWeave スクリプトは、出力項目の名前 (またはキー) を入力項目の値にマップします。入力項目は、関数を含まないセレクター式で指定します。このスクリプトでは、一部の項目の順序や名前も変更します。

DataWeave スクリプト:
%dw 2.0
output application/json
---
{
        address1: payload.order.buyer.address,
        city: payload.order.buyer.city,
        country: payload.order.buyer.nationality,
        email: payload.order.buyer.email,
        name: payload.order.buyer.name,
        postalCode: payload.order.buyer.postCode,
        stateOrProvince: payload.order.buyer.state
}
入力 XML ペイロード:
<?xml version='1.0' encoding='UTF-8'?>
<order>
  <product>
    <price>5</price>
    <model>MuleSoft Connect 2016</model>
  </product>
  <item_amount>3</item_amount>
  <payment>
    <payment-type>credit-card</payment-type>
    <currency>USD</currency>
    <installments>1</installments>
  </payment>
  <buyer>
    <email>mike@hotmail.com</email>
    <name>Michael</name>
    <address>Koala Boulevard 314</address>
    <city>San Diego</city>
    <state>CA</state>
    <postCode>1345</postCode>
    <nationality>USA</nationality>
  </buyer>
  <shop>main branch</shop>
  <salesperson>Mathew Chow</salesperson>
</order>
出力 JSON:
{
  "address1": "Koala Boulevard 314",
  "city": "San Diego",
  "country": "USA",
  "email": "mike@hotmail.com",
  "name": "Michael",
  "postalCode": "1345",
  "stateOrProvince": "CA"
}

次の例では、DataWeave スクリプトで同じキーの複数の XML ノードが含まれる XML を有効な JSON に変換し、同じキーの JSON ノードを作成するのではなく配列を作成します。

DataWeave スクリプト:
%dw 2.0
output application/json duplicateKeyAsArray=true
---
payload
入力 XML ペイロード:
<order>
  <product-lineitems>
	<product-lineitem>
	   <net-price>100.0</net-price>
	</product-lineitem>
	<product-lineitem>
	     <net-price>498.00</net-price>
	</product-lineitem>
  </product-lineitems>
</order>
出力 JSON:
{
  "order": {
    "product-lineitems": {
      "product-lineitem": [
      {
        "net-price": "100.0"
      },
      {
        "net-price": "498.00"
      }
      ]
    }
  }
}