JACKSON – JSON library for Java

How to convert a complex object into JSON using Jackson?

Now i am adding two more properties to the UserDO object. One is an ArrayList and another one is a child object.

private AddressDO address;
private ArrayList occupation;

Modified UserDO code and AddressDO code is provided below.

UserDO.java

package com.jsession4d;

import java.util.ArrayList;

public class UserDO {

private String name;
private long id;
private String dob;
private AddressDO address;
private ArrayList occupation;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getDob() {
return dob;
}
public void setDob(String dob) {
this.dob = dob;
}
public AddressDO getAddress() {
return address;
}
public void setAddress(AddressDO address) {
this.address = address;
}
public ArrayList getOccupation() {
return occupation;
}
public void setOccupation(ArrayList occupation) {
this.occupation = occupation;
}

public String toString(){
return "Printing UserDO: \nname = " + name + "\n" + "id = " + id + "\n" + "dob = " + dob + "\n" + "Occupation = " + occupation
+ "\n address -> \n" + address;
}

}

AddressDO.java

package com.jsession4d;

public class AddressDO {
private String state;
private String country;

public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}

public String toString(){
return "state = " + state + "\n" + "country = " + country;
}
}
Now setting values into UserDOs.

//Creating UserDO1.
UserDO userDO1 = new UserDO();
userDO1.setId(111);
userDO1.setName("Dinosaur");
userDO1.setDob("200 million BCE");

AddressDO addressDO = new AddressDO();
addressDO.setState("Gobi desert");
addressDO.setCountry("Mongolia");

userDO1.setAddress(addressDO);

ArrayList occupationList = new ArrayList();
occupationList.add("Hunting");
occupationList.add("Scavenging");

userDO1.setOccupation(occupationList);

//Creating UserDO2.
UserDO userDO2 = new UserDO();
userDO2.setId(222);
userDO2.setName("Tyrannosaurus");
userDO2.setDob("68 million BCE");

//Setting both UserDO1 and UserDO2 into an ArrayList.
ArrayList<UserDO> userDOList = new ArrayList();
userDOList.add(userDO1);
userDOList.add(userDO2);

Now converting userDO1 to JSON and printing it.

//Creating jackson Objectmapper object.
ObjectMapper mapper = new ObjectMapper();
//Converting userDO to JSON String and printing.
String userDO1_Json = mapper.writeValueAsString(userDO1);
System.out.println("JSON String of UserDO1 :\n" + userDO1_Json);

Output:

JSON String of UserDO1 :
{"name":"Dinosaur","id":111,"dob":"200 million BCE","address":{"state":"Gobi desert","country":"Mongolia"},"occupation":["Hunting","Scavenging"]}

Now converting userDOList ArrayList to JSON and printing it.

//Creating jackson Objectmapper object.
ObjectMapper mapper = new ObjectMapper();
//Converting userDO arrayList to JSON String.
String userDOArrayList_Json = mapper.writeValueAsString(userDOList);
System.out.println("JSON String of ArrayList :\n" + userDOArrayList_Json);

Output:

JSON String of ArrayList :
[{"name":"Dinosaur","id":111,"dob":"200 million BCE","address":{"state":"Gobi desert","country":"Mongolia"},"occupation":["Hunting","Scavenging"]},{"name":"Tyrannosaurus","id":222,"dob":"68 million BCE","address":null,"occupation":null}]

Now converting userDO1_Json back to UserDO object.

//Creating jackson Objectmapper object.
ObjectMapper mapper = new ObjectMapper();
//Converting UserDO1 JSON back to UserDO
UserDO UserDO1_FromJSON = mapper.readValue(userDO1_Json, UserDO.class);
System.out.println("\n\n"+ UserDO1_FromJSON);

Output: (It is printing the overridded toString method’s content of UserDO)

Printing UserDO: 
name = Dinosaur
id = 111
dob = 200 million BCE
Occupation = [Hunting, Scavenging]
 address -> 
state = Gobi desert
country = Mongolia

Now converting userDOArrayList_Json back to ArrayList object.

//Creating jackson Objectmapper object.
ObjectMapper mapper = new ObjectMapper();
//Converting userDOArrayList JSON back to Arraylist of UserDOs.
ArrayList<UserDO> userDOArrayList_fromJSON = mapper.readValue(userDOArrayList_Json, new TypeReference<ArrayList<UserDO>>() {});
System.out.println("\nPrint UserDOArrayList_FromJSON :\n" + userDOArrayList_fromJSON);

Output: (It is printing the ArrayList of UserDOs : userDOArrayList_fromJSON. Note the value of Occupation and address is null for the second UserDO object. This is because these properties are not availabe in JSON and hence printing the default values of these properties in UserDO object. If these properties are instantiated with any other values, that will get printed instead of null)

Print UserDOArrayList_FromJSON :
[Printing UserDO: 
name = Dinosaur
id = 111
dob = 200 million BCE
Occupation = [Hunting, Scavenging]
 address -> 
state = Gobi desert
country = Mongolia, Printing UserDO: 
name = Tyrannosaurus
id = 222
dob = 68 million BCE
Occupation = null
 address -> 
null]

So far so good. Now lets create a new object which will have an ArrayList of UserDOs and lets call it UserListDO

UserListDO.java

package com.jsession4d;

import java.util.ArrayList;

public class UserListDO {

private ArrayList&lt;UserDO&gt; userDOlist;

public ArrayList&lt;UserDO&gt; getUserDOlist() {
return userDOlist;
}

public void setUserDOlist(ArrayList&lt;UserDO&gt; userDOlist) {
this.userDOlist = userDOlist;
}

public String toString(){
return "Printing UserListDO Contents : " + userDOlist.toString();
}
}

Now loading the ArrayList of UserDOs into UserListDO object.

//Setting both UserDO1 and UserDO2 into an ArrayList.
ArrayList&lt;UserDO&gt; userDOList = new ArrayList();
userDOList.add(userDO1);
userDOList.add(userDO2);

//Creating UserlistDO
UserListDO userlistDO = new UserListDO();
userlistDO.setUserDOlist(userDOList);

Converting the UserListDO object to JSON string and printing.

//Creating jackson Objectmapper object.
ObjectMapper mapper = new ObjectMapper();
//Converting userlistDO Object to JSON String.
String userlistObject_Json = mapper.writeValueAsString(userlistDO);
System.out.println("JSON String of userlistDO : \n" + userlistObject_Json);

Output:

JSON String of userlistDO : 
{"userDOlist":[{"name":"Dinosaur","id":111,"dob":"200 million BCE","address":{"state":"Gobi desert","country":"Mongolia"},"occupation":["Hunting","Scavenging"]},{"name":"Tyrannosaurus","id":222,"dob":"68 million BCE","address":null,"occupation":null}]}

Converting the above UserListDO json back into UserListDO object.

//Creating jackson Objectmapper object.
ObjectMapper mapper = new ObjectMapper();
//Converting UserDO1 JSON back to UserDO
UserListDO userListDO_fromJSON = mapper.readValue(userlistObject_Json, UserListDO.class);
System.out.println("\n" + userListDO_fromJSON);

Output:

Printing UserListDO Contents : [Printing UserDO: 
name = Dinosaur
id = 111
dob = 200 million BCE
Occupation = [Hunting, Scavenging]
 address -> 
state = Gobi desert
country = Mongolia, Printing UserDO: 
name = Tyrannosaurus
id = 222
dob = 68 million BCE
Occupation = null
 address -> 
null]

So Jackson proves its purpose.

The full code of RunJackson.java used in this tutorial is provided below.

RunJackson.java

package com.jsession4d;

import java.util.ArrayList;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jsession4d.UserDO;

public class RunJackson {

public static void main(String[] args) {
// TODO Auto-generated method stub

try{
//Creating UserDO1.
UserDO userDO1 = new UserDO();
userDO1.setId(111);
userDO1.setName("Dinosaur");
userDO1.setDob("200 million BCE");

AddressDO addressDO = new AddressDO();
addressDO.setState("Gobi desert");
addressDO.setCountry("Mongolia");

userDO1.setAddress(addressDO);

ArrayList occupationList = new ArrayList();
occupationList.add("Hunting");
occupationList.add("Scavenging");

userDO1.setOccupation(occupationList);

//Creating UserDO2.
UserDO userDO2 = new UserDO();
userDO2.setId(222);
userDO2.setName("Tyrannosaurus");
userDO2.setDob("68 million BCE");

//Setting both UserDO1 and UserDO2 into an ArrayList.
ArrayList&lt;UserDO&gt; userDOList = new ArrayList();
userDOList.add(userDO1);
userDOList.add(userDO2);

//Creating UserlistDO
UserListDO userlistDO = new UserListDO();
userlistDO.setUserDOlist(userDOList);

//Creating jackson Objectmapper object.
ObjectMapper mapper = new ObjectMapper();
//Converting userDO to JSON String and printing.
String userDO1_Json = mapper.writeValueAsString(userDO1);
System.out.println("JSON String of UserDO1 :\n" + userDO1_Json);

//Converting userDO arrayList to JSON String.
String userDOArrayList_Json = mapper.writeValueAsString(userDOList);
System.out.println("JSON String of ArrayList :\n" + userDOArrayList_Json);

//Converting userlistDO Object to JSON String.
String userlistObject_Json = mapper.writeValueAsString(userlistDO);
System.out.println("JSON String of userlistDO : \n" + userlistObject_Json);

//Converting UserDO1 JSON back to UserDO
UserDO UserDO1_FromJSON = mapper.readValue(userDO1_Json, UserDO.class);
System.out.println("\n\n"+ UserDO1_FromJSON);

//Converting userDOArrayList JSON back to Arraylist of UserDOs.
ArrayList&lt;UserDO&gt; userDOArrayList_fromJSON = mapper.readValue(userDOArrayList_Json, new TypeReference&lt;ArrayList&lt;UserDO&gt;&gt;() {});
System.out.println("\nPrint UserDOArrayList_FromJSON :\n" + userDOArrayList_fromJSON);

//Converting UserDO1 JSON back to UserDO
UserListDO userListDO_fromJSON = mapper.readValue(userlistObject_Json, UserListDO.class);
System.out.println("\n" + userListDO_fromJSON);

}catch(Exception e){
e.printStackTrace();
}

}

}
%d bloggers like this: