As a part of End to End REST Assured Tutorial, in this post, We will learn the “De-Serialization” concept where we will create Java Object from JSON Objects.
Previously we have learned Serialization – Java Object To JSON Object Using Jackson API.
We have learned about POJOs in the previous posts. If you have not refereed those posts then I will advise you to go through about POJO concepts here:-
What Is Plain Old Java Object (POJO)?
How To Create POJO Classes Of A JSON Object Payload?
How To Create POJO Classes Of A JSON Array Payload?
How To Create POJO Classes Of A Nested JSON Payload?
When we request an API it may return a response body which is mostly JSON or XML. We can use Jsonpath or Xmlpath to traverse through nodes to fetch specific values but it is not advisable if the response is bigger or heavily nested. We can parse that JSON or XML response into POJO classes. After parsing into POJO classes, we can easily get values from response easily. This is called De-serialization. For this, we can use any JSON parser APIs. In this post, we will use Jackosn APIs which is more famous. I will also cover using the GSON library later.
About Jackson API
Jackson API is a high-performance JSON processor for Java. We can perform serialization, deserialization, reading a JSON file, writing a JSON file, and a lot more things using Jackson API.
To use Jackson API, we need to add it to the Java project build path. You can add using Maven or download a jar file with transitive jars.
Let’s first add the latest Jackson Databind dependency in your maven project. I have used below dependency for this post which is the latest version:-
com.fasterxml.jackson.core jackson-databind 2.11.0
Note:- When we add jackosn-databind dependency then it will automatically download transitive dependencies of the same version i.e. jackson-annotations and jackson-core as well.
If you download and add jackson-databind jar to build path, do not forget to download the other two transitive dependencies as well.
Class ObjectMapper
This is the most powerful class provided by Jackson API and maximum time we will use this class. ObjectMapper class is useful to create JSON object, JSON Array, converting a Java object to a JSON object and vice versa. In this post, we will use the ObjectMapper class to convert a Java Object to a JSON object.
JSON String
{ "firstName" : "Amod", "lastName" : "Mahajan", "gender" : "M", "age" : 29, "salary" : 10987.77, "married" : false }
We need to parse above JSON string to Java Object. To create a Java object we need a class i.e. one or multiple POJO classes based on the requirement. Let’s create a class with field name exactly (case sensitive) the same as node names in above JSON string because with default setting while parsing JSON object o Java object, it will look on getter setter methods of field names. In fact, access specifiers do not matter here. We will cover some interesting facts on it later.
package SerializationDeserialization; public class Employee { private String firstName; private String lastName; private String gender; private int age; private double salary; private boolean married; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } public boolean getMarried() { return married; } public void setMarried(boolean married) { this.married = married; } }
JSON Sring to POJO
Yup! ObjectMapper class provides various overloaded readValue() methods for different purposes. Reading JSON from a file or as a string which you will see mostly. This method will match fields of JSON string to passed POJO class fields and set values using setter methods which we can easily retrieve using getter methods.
package SerializationDeserialization; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; public class DeserializeJsonToJava { public static void main(String[] args) throws JsonMappingException, JsonProcessingException { String jsonString = "{\r\n" + " \"firstName\" : \"Amod\",\r\n" + " \"lastName\" : \"Mahajan\",\r\n" + " \"gender\" : \"M\",\r\n" + " \"age\" : 29,\r\n" + " \"salary\" : 10987.77,\r\n" + " \"married\" : false\r\n" + "}"; ObjectMapper objectMapper = new ObjectMapper(); // Pass JSON string and the POJO class Employee employeeObject = objectMapper.readValue(jsonString, Employee.class); // Now use getter method to retrieve values String firsName = employeeObject.getFirstName(); String lastName = employeeObject.getLastName(); String gender = employeeObject.getGender(); int age = employeeObject.getAge(); double salary = employeeObject.getSalary(); boolean married = employeeObject.getMarried(); System.out.println("Details of Employee is as below:-"); System.out.println("First Name : "+firsName); System.out.println("Last Name : "+lastName); System.out.println("Gender : "+gender); System.out.println("Age : "+age); System.out.println("Salary : "+salary); System.out.println("Married : "+married); } }
You can download/clone the above sample project from here.
If you have any doubt, feel free to comment below.
If you like my posts, please like, comment, share and subscribe.
#ThanksForReading
#HappyLearning
Find all Selenium related posts here, all API manual and automation related posts here, and find frequently asked Java Programs here.
Many other topics you can navigate through the menu.
Thank you, was able to implement it easily following the instructions.
Deserialization i.e. json with Java objects
Good articles Amod.can you please let me know how to handle code when request payload is in xml format but test data passing using json file.wanted to pass testdata in xml payload from json testdata file not though hardcode like admin ,123$ etc. I want value admin and 123$ should come through my framework tetsdata json file.
Hope you understand my question.I have posted my problem at multiple site where you have provided solution on json DOM parser but didn’t get any response let.Can you please help me here.
You can parse json using any json library such as jackson and read values and use wherever you want.