Skip to content

Instantly share code, notes, and snippets.

@magirtopcu
Last active November 11, 2018 20:38
Show Gist options
  • Save magirtopcu/cdc6bc26929927b966fd8cf422f9d04e to your computer and use it in GitHub Desktop.
Save magirtopcu/cdc6bc26929927b966fd8cf422f9d04e to your computer and use it in GitHub Desktop.
Deadly simple JSON serializing of java pojos
package core;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class TinyJsonMapper {
public String convertJson(Object object){
StringBuilder builder = new StringBuilder();
try {
if(object instanceof Collection){
convertCollection(builder,(Collection)object);
}
else{
convertObject(builder,object);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return builder.toString();
}
interface Converter {
StringBuilder convert(StringBuilder sb, Object object);
}
public static Map<Class,Converter> converterMap = new HashMap<>();
static {
converterMap.put(Number.class,(sb,ob)->{
sb.append(ob);
return sb;
});
converterMap.put(String.class,(sb,ob)->{
String str = (String) ob;
str = str.replaceAll("\"","\\\\\"");
sb.append("\"").
append(str)
.append("\"");
return sb;
});
converterMap.put(Date.class,(sb, ob)->{
sb.append(((Date)ob).getTime());
return sb;
});
}
public boolean convertRegisteredTypes(StringBuilder sb, Object ob){
if(ob == null){
sb.append("null");
return true;
}
Converter con = null;
if(ob instanceof Number){
con = converterMap.get(Number.class);
}
else if(ob instanceof String ){
con = converterMap.get(String.class);
}
else if(ob instanceof Date){
con = converterMap.get(Date.class);
}
else{
con = converterMap.get(ob.getClass());
}
if(con!=null){
con.convert(sb,ob);
return true;
}
return false;
}
public StringBuilder convertCollection(StringBuilder builder,Collection collection) throws IllegalAccessException {
builder.append("[");
for(Object colObj : (Collection)collection){
convert(builder,colObj);
builder.append(",");
}
builder.deleteCharAt(builder.length()-1);
builder.append("]");
return builder;
}
public StringBuilder convertObject(StringBuilder builder , Object object) throws IllegalAccessException {
builder.append("{");
converToJson(builder,object);
builder.append("}");
return builder;
}
public StringBuilder convert(StringBuilder builder,Object o) throws IllegalAccessException {
boolean registeredTypeConverted = convertRegisteredTypes(builder,o);
if(!registeredTypeConverted){
if(o instanceof Collection){
convertCollection(builder,(Collection) o);
}
else {
convertObject(builder,o);
}
}
return builder;
}
protected StringBuilder converToJson(StringBuilder builder,Object object) throws IllegalAccessException {
Field[] fields = object.getClass().getDeclaredFields();
for(int i = 0;i<fields.length;i++){
Field f = fields[i];
builder.append("\""+f.getName()+"\"").append(":");
f.setAccessible(true);
Object o = f.get(object);
convert(builder,o);
if(i!=fields.length-1){
builder.append(",");
}
}
return builder;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment