Over a million developers have joined DZone.

JSON to JSON Conversion Using Dataweave and Datamapper

DZone's Guide to

JSON to JSON Conversion Using Dataweave and Datamapper

Want to know how to transform one kind of JSON to another kind of JSON? Let's take a look at this article's explanation on how to do that.

· Integration Zone ·
Free Resource

SnapLogic is the leading self-service enterprise-grade integration platform. Download the 2018 GartnerMagic Quadrant for Enterprise iPaaS or play around on the platform, risk free, for 30 days.

Sometimes, converting an incoming payload to JSON using XML to JSON or Object to JSON does not give us the required output. Here, I am going to explain a step-by-step method of transforming one kind of JSON to another kind of JSON.

If you are using Mule Runtime 3.8 or above, you can do that using Dataweave, and if you are using 3.6x or below, you can use Datamapper.   

First, let's see the requirements we have:

Incoming JSON

  "name": {
 "firstName": "John",
   "lastName": "Doe"
  "address": {
    "streetAddress": "21 2nd Street",
    "city": "New York"
  "phoneNumber": [
      "phoneNumber": 6788989,
      "areaCode": 647
      "phoneNumber": 6788990,
      "areaCode": 647

Desired JSON:

   "firstName": "John",
   "lastName": "Doe",
   "street": "21 2nd Street",
   "city": "New York",
   "gender": "M",

Suppose the first JSON is the incoming request and we need to transform that JSON to the second type of JSON as shown:  

Let's do this using DATAWEAVE:

This the Configuration XML that is going to be generated when we follow the below explained steps:

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd">
    <http:listener-config name="HTTP_Listener_Configuration4" host="" port="9098" doc:name="HTTP Listener Configuration"/>
    <flow name="dataweave_exampleFlow">
        <http:listener config-ref="HTTP_Listener_Configuration4" path="/dataweave" doc:name="HTTP"/>
        <byte-array-to-string-transformer doc:name="Byte Array to String"/>
        <logger message="----------------------BEfore-------------- &gt;#[payload]" level="INFO" doc:name="Logger"/>
        <dw:transform-message doc:name="Transform Message" metadata:id="cfc4ea47-dd3a-401f-b21e-a70dfbe78b07">
            <dw:input-payload doc:sample="\\rsavdifs\ROOT\Homes\joh6666\Desktop\inputJSON.json" mimeType="application/json"/>
            <dw:set-payload><![CDATA[%dw 1.0
%output application/json
firstName: payload.name.firstName,
lastName: payload.name.lastName,
street: payload.address.streetAddress,
city: payload.address.city,
PhoneNumbers: payload.phoneNumber map ((phoneNumber , indexOfPhoneNumber) -> {
no: phoneNumber.areaCode ++ "" ++ phoneNumber.phoneNumber  
gender: payload.otherInformation.gender,
dateOfBirth: payload.otherInformation.dateOfBirth
        <logger message="#[payload]" level="INFO" doc:name="Logger"/>

Now lets see all this step by step:

1. Drag and drop the HTTP component, Configure it. (Simple you can do that)

2. Drag and drop Byte Array to string so that we can log our incoming request. (Human Readable)

3. Log the incoming request.

4. Now drag and drop the "Transform Message" or "dataWeave" and configure it as shown below.

i. First Save both the JSON in your local with .json extension. 

ii.Now in Transform message click on "DEFINE METADATA"(highlighted) for input ->Add -> Choose JSON->Example->your incoming request(that you have saved).

iii. repeat this for output metadata with the desirable JSON.

Image title

Image title

iv. When you do these steps mapping will be automatically generated and you can check the desirable output using "preview" section as shown in below image.

Image title

v. Since I needed to concatenate areaCode and PhoneNumber, I needed to change the mapping a little bit, that you can see when you will do this practically.

5. Add the logger and log the response payload and deploy the program, you will get the desired output.

Download A Buyer's Guide to Application and Data Integration, your one-stop-shop for research, checklists, and explanations for an application and data integration solution.

mule 3.9 ,mule 3.7 ,esb ,json ,dataweave ,datamapper ,transformation ,tutorial ,integration

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}