Thursday 18 April 2013

Object to JSON Conversion

Below code uses Jackson Json API to convert an Object into a JSON String

We will be converting Person class which has Company instance composed in it.


class Person {
 String name;
 int age;
 Company company;
 
 /**
  * @return the company
  */
 public Company getCompany() {
  return company;
 }
 
 public Person(String name, int age, Company company){
  this.name = name;
  this.age = age;
  this.company = company;
 }
 
 /**
  * @return the age
  */
 public int getAge() {
  return age;
 }
 
 /**
  * @return the name
  */
 public String getName() {
  return name;
 }
}

class Company {
 String companyName;
 float salary;
 
 public Company(String companyName, float salary) {
  this.companyName=companyName;
  this.salary = salary;
 }
 
 /**
  * @return the salary
  */
 public float getSalary() {
  return salary;
 }
 /**
  * @return the companyName
  */
 public String getCompanyName() {
  return companyName;
 }
}


If we don't create the getter methods then the below exception will come:

Exception in thread "main" org.codehaus.jackson.map.JsonMappingException: No serializer found for class com.blogspot.javasampleprogram.Person and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) )

package com.blogspot.javasampleprogram;

import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;

import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.ObjectMapper;

/**
 * @author http://java-sample-program.blogspot.in/  
 * Object to Json Conversion
 */
public class JsonStringGenerator {
 

 /**
  * Method to get a JSON string representing the object
  * supplied.
  * @param object for which JSON string is required
  * @return Json String
  * @throws IOException
  */
 public static String createJsonString(Object object) throws IOException {
  Writer writer = new StringWriter();
  JsonFactory factory = new JsonFactory();
  JsonGenerator generator = factory.createJsonGenerator(writer);
  generator.setCodec(new ObjectMapper());
  generator.writeObject(object);
  generator.close();
  System.out.println("Json string " + writer.toString());
  return writer.toString();
 }
 
 public static void main(String[] args)  throws IOException {
  Company company = new Company("ABC", 15001.90f);
  Person p1 = new Person("Jason Stathom", 36, company);
  createJsonString(p1);
 }
 
}

Result: {"company":{"salary":15001.9,"companyName":"ABC"},"age":36,"name":"Jason Stathom"}

We will have to add the following Jackson API dependency:


<dependency>
  <groupId>org.codehaus.jackson</groupId>
  <artifactId>com.springsource.org.codehaus.jackson.mapper</artifactId>
  <version>1.4.3</version>
</dependency>

Wednesday 17 April 2013

HashMap to JSON String

Below code uses Jackson Json API to convert a HashMap into a JSON String


package com.blogspot.javasampleprogram;

import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.HashMap;

import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.ObjectMapper;

/**
 * @author http://java-sample-program.blogspot.in/  
 * HashMap to Json String generator
 */
public class JsonStringGenerator {
 

 /**
  * Method to convert map into json format
  * @param map with data to be converted into json
  * @return json string
  */
 public static String createJsonString(HashMap jsonMap) throws IOException {
  System.out.println("Map:"+jsonMap);
  Writer writer = new StringWriter();
  JsonGenerator jsonGenerator = new JsonFactory().
        createJsonGenerator(writer);
  ObjectMapper mapper = new ObjectMapper();
  mapper.writeValue(jsonGenerator, jsonMap);
  jsonGenerator.close();
  System.out.println(writer.toString());
  return writer.toString();
 }
 
 public static void main(String[] args)  throws IOException {
  HashMap<String, String> map = new HashMap<String, String>();
  map.put("1", "Jason Stathom");
  map.put("2", "Brad Pitt");
  map.put("3", "Angelina");
  createJsonString(map);
 }
 
}

Result: {"3":"Angelina","2":"Brad Pitt","1":"Jason Stathom"}

We will have to add following dependency:

<dependency>
  <groupId>org.codehaus.jackson</groupId>
  <artifactId>com.springsource.org.codehaus.jackson.mapper</artifactId>
  <version>1.4.3</version>
</dependency>