Transform XML to JSON

These simple DataWeave examples change the XML input to JSON output. Note that more complex transformations usually require the use of the map or mapObject function. Before you begin, note that DataWeave version 2 (%dw 2.0) is for Mule 4 apps. For a Mule 3 app, refer to DataWeave version 1 (%dw 1.0) examples, within the Mule 3.9 documentation set. For other Mule versions, you can use the Mule Runtime version selector in the table of contents.

The following DataWeave script maps the names (or keys) for the output fields to values of the input fields. The input fields are specified with selector expressions without any functions. The script also changes the order and names of some of the fields.

DataWeave Script:
%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
}
Input XML Payload:
<?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>
Output JSON:
{
  "address1": "Koala Boulevard 314",
  "city": "San Diego",
  "country": "USA",
  "email": "mike@hotmail.com",
  "name": "Michael",
  "postalCode": "1345",
  "stateOrProvince": "CA"
}

In the following example, the DataWeave script transforms the XML containing multiple XML nodes with the same key into a valid JSON creating an array instead of creating JSON nodes with the same key.

DataWeave Script:
%dw 2.0
output application/json duplicateKeyAsArray=true
---
payload
Input XML Payload:
<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>
Output JSON:
{
  "order": {
    "product-lineitems": {
      "product-lineitem": [
      {
        "net-price": "100.0"
      },
      {
        "net-price": "498.00"
      }
      ]
    }
  }
}

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub