<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
Create plain old java obj, something as simple as follows:
package com.memeanalytics.json_demo; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DemoEntity { private String name = ""; private Date createDate=new Date(); private boolean enabled=false; private double value = 0; private int count = 0; public String getName() { return this.name; } public void setName(String name) { this.name=name; } public String getCreateDateString() { SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return formatter.format(this.createDate); } public void setCreateDateString(String dateString) { SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { this.createDate = formatter.parse(dateString); } catch (ParseException e) { e.printStackTrace(); } } public boolean isEnabled() { return this.enabled; } public void setEnabled(boolean enabled) { this.enabled=enabled; } public int getCount() { return this.count; } public int setCount(int count) { return this.count = count; } public double getValue() { return this.value; } public void setValue(double value) { this.value=value; } }
Create a utility class with two methods to encode and decode between JSON and the DemoEntity obj:
package com.memeanalytics.json_demo; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; public class JsonEncoder { public static String encode(DemoEntity obj) { JSONObject json=new JSONObject(); json.put("name", obj.getName()); json.put("createDate", obj.getCreateDateString()); json.put("value", obj.getValue()); json.put("count", obj.getCount()); return json.toJSONString(); } public static DemoEntity decode(String jsonString) { JSONParser parser=new JSONParser(); DemoEntity obj=null; try{ JSONObject json = (JSONObject)parser.parse(jsonString); obj=new DemoEntity(); obj.setName((String)json.get("name")); obj.setCreateDateString((String)json.get("createDate")); obj.setValue((Double)json.get("value")); obj.setCount(Integer.parseInt(json.get("count").toString())); }catch(ParseException ex) { ex.printStackTrace(); } return obj; } }Now in the main class simply invokes the encode and decode methods to switch between JSON and DemoEntity obj:
package com.memeanalytics.json_demo; public class App { public static void main( String[] args ) { DemoEntity obj=new DemoEntity(); obj.setName("obj1"); obj.setValue(12.5); obj.setCount(10); String jsonString = JsonEncoder.encode(obj); System.out.println(jsonString); DemoEntity obj2 = JsonEncoder.decode(jsonString); if(obj2 != null) { System.out.println("name : " + obj2.getName()); System.out.println("created date : " + obj2.getCreateDateString()); System.out.println("value : "+obj2.getValue()); System.out.println("count : "+obj2.getCount()); } } }
Two points to note:
1. for Date() object, i will be safer to convert it to String before put it into a JSONObject during serialization, and vice versa in deserialization.
2. for Integer object, it will be safer to covert the the item returned by JSONObject.get() to a String then parse it to integer during deserialization (as JSONObject.get() usually will return a Long object instead of an Integer object).
Below is the link to the complete source codes:
https://dl.dropboxusercontent.com/u/113201788/storm/json-demo.zip