![JAR search and dependency download from the Maven repository](/logo.png)
com.eshore.tools.Json2StringEncoder Maven / Gradle / Ivy
package com.eshore.tools;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Map;
import com.eshore.uas.extensions.IPropertiesEncoder;
public class Json2StringEncoder {
static Log log =Logger.getLogger(Json2StringEncoder.class);
public static String asJsonString(Object o,IPropertiesEncoder encoder,String ...ig){
StringBuilder json = new StringBuilder();
asJson(json,o,0,encoder,null,ig);
return json.toString();
}
private static void asJson(StringBuilder json,Object o,int level,IPropertiesEncoder encoder,String key,String ...ig){
if(o==null){
json.append("null");
}else if(o instanceof String||o instanceof Boolean){
String v=o.toString();
if(encoder!=null)v=encoder.encode(key, v);
json.append('"').append(v).append('"');
return;
}else if (o instanceof Integer
||o instanceof Double
||o instanceof Long
||o instanceof Float
||o instanceof Short
||o instanceof Byte
||o instanceof BigDecimal
){
json.append(o);
}else if (o instanceof Date){
json.append('"').append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(o)).append('"');
}else if (o.getClass().isArray()){
jsonArray(json,(Object[])o,level,encoder,key,ig);
}else if (o instanceof Map){
jsonMap(json,(Map)o,level,encoder,ig);
}else if (o instanceof Collection){
jsonCollection(json,(Collection)o,level,encoder,key,ig);
}else{
jsonObject(json,o,level,encoder,key,ig);
}
}
private static void jsonCollection(StringBuilder json,Collection co,int level,IPropertiesEncoder encoder,String key,String ...ig){
json.append('[');
boolean isFirst=true;
for(Object o:co){
if(isFirst){isFirst=false;}else{json.append(',');}
asJson(json,o,level+1,encoder,key,ig);
}
json.append(']');
}
private static void jsonArray(StringBuilder json,Object[] co,int level,IPropertiesEncoder encoder,String key,String ...ig){
json.append('[');
boolean isFirst=true;
for(Object o:co){
if(isFirst){isFirst=false;}else{json.append(',');}
asJson(json,o,level+1,encoder,key,ig);
}
json.append(']');
}
private static boolean contain(Object o,String ...ig) {
if(ig!=null&&ig.length>0)
for(String i:ig) {
if(i!=null&&i.equals(o))return true;
}
return false;
}
private static void jsonMap(StringBuilder json,Map map,int level,IPropertiesEncoder encoder,String ...ig){
json.append('{');
boolean isFirst=true;
for(Object o:map.entrySet()){
Map.Entry e=(Map.Entry)o;
Object k=e.getKey();
if(contain(k,ig))continue;
if(e.getValue()==null)continue;
if(isFirst){isFirst=false;}else{json.append(',');}
json.append('"').append(e.getKey()).append("\" : ");
asJson(json,e.getValue(),level+1,encoder,e.getKey().toString(),ig);
}
json.append('}');
}
private static String firstLower(String str){
char [] ca=str.toCharArray();
if(ca[0]<91)ca[0]+=32;
return new String(ca);
}
private static void jsonObject(StringBuilder json,Object o,int level,IPropertiesEncoder encoder,String key,String ...ig){
json.append('{');
boolean isFirst=true;
Method [] methods = o.getClass().getMethods();//getDeclaredMethods();
for(Method m:methods){
String name =m.getName();
if(!name.startsWith("get"))continue;
if("getClass".equals(name))continue;
Object value=null;
try {
value=m.invoke(o, null);
} catch (Exception e) {
e.printStackTrace();
log.warn(" fail to get value:",o.getClass(),m.getName(), e);
}
if(value==null)continue;
name=firstLower(name.substring(3));
if(contain(name,ig))continue;
if(isFirst){isFirst=false;}else{json.append(',');}
json.append('"').append(name).append("\" : ");
asJson(json,value,level+1,encoder,name,ig);
}
json.append('}');
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy