I am Siva, a passionate java developer, open source enthusiast, blogger. I like to cover Java, Struts, Spring, Hibernate, Ajax Tutorials, How-To's and Best Practices. Sivaprasadreddy is a DZone MVB and is not an employee of DZone and has posted 37 posts at DZone. You can read more from them at their website. View Full User Profile

JSON processing using Jackson Java JSON Processor

03.23.2011
| 57824 views |
  • submit to reddit

JSON(Javascript Object Notation) is becoming a more popular data exchange format.
While developing Web applications using Javascript frameworks like YUI, ExtJS, DOJO etc we can use either XML or JSON to exchange the data between the client and server.  Normally we get the response from the server in terms of java objects. Then in Servlets or Action classes we need to build the JSON from objects and send them back to client.


To build the JSON response from a Java object we can use the Jackson Java JSON Processor, which very easy to use.

Let us see how we can use Jackson to convert a java object into JSON and vice versa.

We can download the jackson-all-1.6.4.jar from http://jackson.codehaus.org.

The key class which does the marshalling and unmarshalling is org.codehaus.jackson.map.ObjectMapper.

Let us create a User javabean as follows:

package com.sivalabs.json;
import java.util.Date;

public class User
{
private String userId;
private UserName userName;
private Date dob;

@Override
public String toString()
{
return "User [dob=" + dob + ", userId=" + userId + ", userName="+ userName + "]";
}
//setters and getters

}

 

package com.sivalabs.json;
public class UserName
{
private String firstname;
private String middlename;
private String lastname;

@Override
public String toString()
{
return "UserName [firstname=" + firstname + ", lastname=" + lastname+ ", middlename=" + middlename + "]";
}
//setters and getters
}



Now let us create an instance of User and marshall it into JSON:

ObjectMapper mapper = new ObjectMapper();

UserName userName = new UserName();
userName.setFirstname("Katamreddy");
userName.setMiddlename("Siva");
userName.setLastname("PrasadReddy");

User user = new User();
user.setUserId("1");
user.setUserName(userName);
user.setDob(new Date());

Writer strWriter = new StringWriter();
mapper.writeValue(strWriter, user);
String userDataJSON = strWriter.toString();
System.out.println(userDataJSON);


This will print the User data in JSON format as :
{"userId":"1","userName":{"firstname":"Katamreddy","middlename":"Siva","lastname":"PrasadReddy"},"dob":1300878089906}

Now let us unmarshall the following user data in json format into User Object:

{
    "userId":"100",
    "userName":
        {
         "firstname":"K",
         "middlename":"Siva",
         "lastname":"Prasad"
        },
    "dob":1300878089906
}

String userDataJSON = "{\"userId\":\"100\",\"userName\":{\"firstname\":\"K\",\"middlename\":\"Siva\",\"lastname\":\"Prasad\"},\"dob\":1300878089906}";
User userFromJSON = mapper.readValue(userDataJSON, User.class);
System.out.println(userFromJSON);


This will print the User object as :
User [dob=Wed Mar 23 16:31:29 IST 2011, userId=100, userName=UserName [firstname=K, lastname=Prasad, middlename=Siva]]

The Date value is marshalled as Timestamp which is the default behaviour. If you want you can change the DateFormat as follows:

DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");
SerializationConfig serConfig = mapper.getSerializationConfig();
serConfig.setDateFormat(dateFormat);
DeserializationConfig deserializationConfig = mapper.getDeserializationConfig();
deserializationConfig.setDateFormat(dateFormat);
mapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);


Then the User JSON will be :
{"userId":"1","userName":{"firstname":"Katamreddy","middlename":"Siva","lastname":"PrasadReddy"},"dob":"03-23-2011"}

We can also marshall a Java Object as json into a file as:

mapper.writeValue(new File("user.json"), user);

This will create a file user.json as :
{
    "userId":"100",
    "userName":
        {
         "firstname":"K",
         "middlename":"Siva",
         "lastname":"Prasad"
        },
    "dob":1300878089906
}


We can build the User object from user,json as:

User user = mapper.readValue(new File("user.json"), User.class);


For more information you can visit http://jackson.codehaus.org

 

From: http://sivalabs.blogspot.com/2011/03/json-processing-using-jackson-java-json.html

 

AttachmentSize
User.java1.39 KB
JSONClient.java2.24 KB
5
Your rating: None Average: 5 (2 votes)
Published at DZone with permission of Sivaprasadreddy Katamreddy, author and DZone MVB.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)