Object转json字符串,Object转Map,Map转Object 简单源码,jsonobject,publicclassA
Object转json字符串,Object转Map,Map转Object 简单源码,jsonobject,publicclassA
publicclassAppObjectUtil{
privatestaticfinalLoggerlogger=LoggerFactory.getLogger(AppObjectUtil.class); privatestaticfinalStringCLASSNAME=AppObjectUtil.class.getName(); privatestaticfinalStringJSON__PROPERTY_FILE=CLASSNAME;
privatestaticfinalStringESCAPE_JSON_RESPONSE="escapeJSONResponse"; privatestaticBooleaniCrossSiteScriptingEnabled=null; privatestaticBooleanisEscapeNull=false; privatestaticfinalStringlineSeparator=System.getProperty("line.separator");; privatefinalstaticString[][]ESCAPE_CHARACTERS={ {"\\","\\\\"}, {"\"","\\\""}, {"\n","\\n"}, {"\r","\\r"}, {"\t","\\t"}, {"\f","\\f"}, //根据http://www.json.org/上说明不必过滤一下字符 //{"\'","\\\'"}, };
privatefinalstaticString[][]CROSS_SITE_SCRIPTING_CHARACTERS={ {"&","&amp;"}, {"<","&lt;"}, {">","&gt;"},
};
privatestaticSet<Object>iProcessedObjects;
/
<p>Title:</p>
<p>Description:构造器</p> */ publicAppObjectUtil(){ super(); }
/
@Title:objectToJson
@Description:把对象转换成json格式的数据 @paramobject @return */ publicstaticStringtoJson(Objectobject,StringdateFormat){ StringBuildersb=newStringBuilder(); try{ iProcessedObjects=newHashSet<Object>();
outputAsJson(sb,"",object,dateFormat); }catch(Exceptione){ logger.error("toJsonerror",e); } returnsb.toString(); } publicstaticStringtoJson(Objectobject){ StringBuildersb=newStringBuilder(); try{ iProcessedObjects=newHashSet<Object>();
outputAsJson(sb,"",object); }catch(Exceptione){ logger.error("toJsonerror",e); } returnsb.toString(); }
/
@Title:outputAsJson
@Description:返回json格式的数据 @paramsb返回json数据到StringBuilder对象中 @paramindent当前indent @paramobject需要转换成json格式的对象 @throwsException */ privatestaticvoidoutputAsJson(StringBuildersb,Stringindent,Objectobject,StringdateFormat)throwsException{
if(object==null){ if(getIsEscapeNull()){ return; } sb.append("null"); }elseif(objectinstanceofDate){ Datedate=(Date)object; sb.append(quote(AppDateAndStringUtil.format(date,dateFormat))); } elseif(iProcessedObjects.contains(object)||objectinstanceofString || objectinstanceofCharacter||objectinstanceofClass||objectinstanceofThrowable){ sb.append(quote(object)); }elseif(objectinstanceofBoolean||objectinstanceofNumber){ sb.append(object.toString()); }elseif(objectinstanceofMap){ iProcessedObjects.add(object); Map<?,?>map=(Map<?,?>)object; if(map.size()==0){ sb.append("{}"); }else{ sb.append("{"); Iterator<?>keys=map.keySet().iterator(); inti=0; while(keys.hasNext()){ Objectkey=keys.next(); if(getIsEscapeNull()&&map.get(key)==null){ continue; } if(i>0){ sb.append(","); } i++; sb.append(lineSeparator); sb.append(indent); sb.append("\t"); sb.append(quote(key.toString())); sb.append(":"); outputAsJson(sb,indent+"\t",map.get(key),dateFormat); } sb.append(lineSeparator); sb.append(indent); sb.append("}"); } iProcessedObjects.remove(object); }elseif(object.getClass().isArray()){ iProcessedObjects.add(object); intlength=Array.getLength(object); if(length==0){ sb.append("[]"); }elseif(length==1){ sb.append("["); if(getIsEscapeNull()&&Array.get(object,0)==null){ }else{ outputAsJson(sb,indent,Array.get(object,0),dateFormat); } sb.append("]"); }else{ sb.append("["); intk=0; for(inti=0;i<length;i++){ if(getIsEscapeNull()&&Array.get(object,i)==null){ continue; } if(k>0){ sb.append(","); } k++; sb.append(lineSeparator); sb.append(indent); sb.append("\t"); outputAsJson(sb,indent+"\t",Array.get(object,i),dateFormat); } sb.append(lineSeparator); sb.append(indent); sb.append("\t"); sb.append("]"); } iProcessedObjects.remove(object); }elseif(objectinstanceofCollection){ iProcessedObjects.add(object); outputAsJson(sb,indent,((Collection<?>)object).toArray(),dateFormat); iProcessedObjects.remove(object); }else{ iProcessedObjects.add(object); try{ PropertyDescriptorproperties[]=Introspector.getBeanInfo(object.getClass()).getPropertyDescriptors(); Map<Object,Object>map=newHashMap<Object,Object>(properties.length); for(inti=0;i<properties.length;i++){ MethodreadMethod=properties[i].getReadMethod(); if(readMethod!=null){ booleanisContinue=false; for(Fieldfield:object.getClass().getDeclaredFields()){ if((field.getName().substring(0,1).toLowerCase()+field.getName().substring(1)).equals(properties[i].getName())){ map.put(field.getName(),readMethod.invoke(object,(Object[])null)); isContinue=true; break; } } if(!isContinue){ map.put(properties[i].getName(),readMethod.invoke(object,(Object[])null)); } } } outputAsJson(sb,indent,map,dateFormat); iProcessedObjects.remove(object); }catch(InvocationTargetExceptione){ logger.error("outputAsJsonerror",e); throwe; }catch(IllegalAccessExceptione){ logger.error("IllegalAccessExceptionerror",e); throwe; }catch(IntrospectionExceptione){ logger.error("IntrospectionExceptionerror",e); throwe; } }
} privatestaticvoidoutputAsJson(StringBuildersb,Stringindent,Objectobject)throwsException{ if(object==null){ if(getIsEscapeNull()){ return; } sb.append("null"); }elseif(iProcessedObjects.contains(object)||objectinstanceofString||objectinstanceofDate|| objectinstanceofCharacter||objectinstanceofClass||objectinstanceofThrowable){ sb.append(quote(object)); }elseif(objectinstanceofBoolean||objectinstanceofNumber){ sb.append(object.toString()); }elseif(objectinstanceofMap){ iProcessedObjects.add(object); Map<?,?>map=(Map<?,?>)object; if(map.size()==0){ sb.append("{}"); }else{ sb.append("{"); Iterator<?>keys=map.keySet().iterator(); inti=0; while(keys.hasNext()){ Objectkey=keys.next(); if(getIsEscapeNull()&&map.get(key)==null){ continue; } if(i>0){ sb.append(","); } i++; sb.append(lineSeparator); sb.append(indent); sb.append("\t"); sb.append(quote(key.toString())); sb.append(":"); outputAsJson(sb,indent+"\t",map.get(key)); } sb.append(lineSeparator); sb.append(indent); sb.append("}"); } iProcessedObjects.remove(object); }elseif(object.getClass().isArray()){ iProcessedObjects.add(object); intlength=Array.getLength(object); if(length==0){ sb.append("[]"); }elseif(length==1){ sb.append("["); if(getIsEscapeNull()&&Array.get(object,0)==null){
}else{ outputAsJson(sb,indent,Array.get(object,0)); } sb.append("]"); }else{ sb.append("["); intk=0; for(inti=0;i<length;i++){ if(getIsEscapeNull()&&Array.get(object,i)==null){ continue; } if(k>0){ sb.append(","); } k++; sb.append(lineSeparator); sb.append(indent); sb.append("\t"); outputAsJson(sb,indent+"\t",Array.get(object,i)); } sb.append(lineSeparator); sb.append(indent); sb.append("\t"); sb.append("]"); } iProcessedObjects.remove(object); }elseif(objectinstanceofCollection){ iProcessedObjects.add(object); outputAsJson(sb,indent,((Collection<?>)object).toArray()); iProcessedObjects.remove(object); }else{ iProcessedObjects.add(object); try{ PropertyDescriptorproperties[]=Introspector.getBeanInfo(object.getClass()).getPropertyDescriptors(); Map<Object,Object>map=newHashMap<Object,Object>(properties.length); for(inti=0;i<properties.length;i++){ MethodreadMethod=properties[i].getReadMethod(); if(readMethod!=null){ booleanisContinue=false; for(Fieldfield:object.getClass().getDeclaredFields()){ if((field.getName().substring(0,1).toLowerCase()+field.getName().substring(1)).equals(properties[i].getName())){ map.put(field.getName(),readMethod.invoke(object,(Object[])null)); isContinue=true; break; } } if(!isContinue){ map.put(properties[i].getName(),readMethod.invoke(object,(Object[])null)); } } } outputAsJson(sb,indent,map); iProcessedObjects.remove(object); }catch(InvocationTargetExceptione){ logger.error("InvocationTargetExceptionerror",e); throwe; }catch(IllegalAccessExceptione){ logger.error("IllegalAccessExceptionerror",e); throwe; }catch(IntrospectionExceptione){ logger.error("IntrospectionExceptionerror",e); throwe; } }
}
/
@Title:quote
@Description:替换掉特殊字符为html识别的字符 @paramobject @return */ privatestaticStringquote(Objectobject){ Stringstr=object.toString(); for(inti=0;i<ESCAPE_CHARACTERS.length;i++){ str=str.replaceAll(ESCAPE_CHARACTERS[i][0],ESCAPE_CHARACTERS[i][1]); } if(AppObjectUtil.isCrossSiteScriptingEnabled()){ for(inti=0;i<CROSS_SITE_SCRIPTING_CHARACTERS.length;i++){ str=str.replaceAll(CROSS_SITE_SCRIPTING_CHARACTERS[i][0],CROSS_SITE_SCRIPTING_CHARACTERS[i][1]); } } StringBuffersb=newStringBuffer(str.length()+2); sb.append("\""); sb.append(str); sb.append("\""); Stringresult=sb.toString(); returnresult; }
/
这个方法是检查是否支持json对于script的站点跨域问题
@returntrue如果支持json对于script的跨域. */ privatestaticbooleanisCrossSiteScriptingEnabled(){ if(iCrossSiteScriptingEnabled==null){ iCrossSiteScriptingEnabled=newBoolean(true);
try{ ResourceBundlebundle=ResourceBundle.getBundle(JSON__PROPERTY_FILE); StringescapeJSONResponse=(String)bundle.getObject(ESCAPE_JSON_RESPONSE); iCrossSiteScriptingEnabled=newBoolean(escapeJSONResponse); }catch(MissingResourceExceptione){ logger.error("MissingResourceExceptionerror",e); }
} returniCrossSiteScriptingEnabled.booleanValue(); }
/
@Title:sqlStrToSqlQueryString
@Description:把sql字符串按行解析并生成合法SQL语句 @paramsqlStr @return @throwsIOException / publicstaticStringsqlStrToSqlQueryString(StringsqlStr)throwsIOException{ if(sqlStr==null){ returnnull; } BufferedReaderreader=newBufferedReader(newStringReader(sqlStr)); Stringline=null; StringBufferqueryBuffer=null; while((line=reader.readLine())!=null){ if(queryBuffer==null){ queryBuffer=newStringBuffer(); } if(line.length()>0&&!line.startsWith("--")){ queryBuffer.append(line).append(""); if(line.lastIndexOf(";")!=line.length()-1){ continue; }else{ returnqueryBuffer.substring(0,queryBuffer.length()-2); } } } if(queryBuffer==null){ returnsqlStr; } returnqueryBuffer.substring(0,queryBuffer.length()-1); }
/
@returntheisEscapeNull
/ publicstaticBooleangetIsEscapeNull(){ returnisEscapeNull; }
/ @paramisEscapeNulltheisEscapeNulltoset
/ publicstaticvoidsetIsEscapeNull(BooleanisEscapeNull){ AppObjectUtil.isEscapeNull=isEscapeNull; } / @Title:generateFieldMapFromObject @paramtargetClass @return @throwsException */ publicstaticMap<String,Object>generateFieldMapFromObject(ObjecttargetClass)throwsException{ if(targetClass==null){ returnnull; } Map<String,Object>fieldMap=null; PropertyDescriptorproperties[]=Introspector.getBeanInfo(targetClass.getClass()).getPropertyDescriptors(); for(inti=0;i<properties.length;i++){ MethodreadMethod=properties[i].getReadMethod(); if(readMethod!=null){ if(fieldMap==null){ fieldMap=newHashMap<String,Object>(); } booleanisContinue=false; for(Fieldfield:targetClass.getClass().getDeclaredFields()){ if((field.getName().substring(0,1).toLowerCase()+field.getName().substring(1)).equals(properties[i].getName())){ fieldMap.put(field.getName(),readMethod.invoke(targetClass,(Object[])null)); isContinue=true; break; } } if(!isContinue){ try{ fieldMap.put(properties[i].getName(),readMethod.invoke(targetClass.getClass(),(Object[])null)); }catch(Exceptione){ } } } } returnfieldMap;
} /
@paramtargetClass
@paramfieldMap @return @throwsException */ publicstaticObjectgenerateObjectFromFieldMap(ObjecttargetClass,Map<String,Object>fieldMap)throwsException{ if(targetClass==null){ returnnull; } Class<?>objectClass=null; if(targetClassinstanceofClass){ objectClass=(Class<?>)targetClass; targetClass=objectClass.newInstance(); }else{ objectClass=targetClass.getClass(); } PropertyDescriptorproperties[]=Introspector.getBeanInfo(objectClass).getPropertyDescriptors(); for(inti=0;i<properties.length;i++){ MethodwriteMethod=properties[i].getWriteMethod(); if(writeMethod!=null){ Objectvalue=null; for(Fieldfield:objectClass.getDeclaredFields()){ if((field.getName().substring(0,1).toLowerCase()+field.getName().substring(1)).equals(properties[i].getName())){ value=fieldMap.get(field.getName()); break; } } if(value==null){ value=fieldMap.get(properties[i].getName()); } if(value==null){ for(Map.Entry<String,Object>entry:fieldMap.entrySet()){ if(entry.getValue()!=null){ StringsetMethodName="set"+entry.getKey().substring(0,1).toUpperCase()+entry.getKey().substring(1); if(writeMethod.getName().equals(setMethodName)){ value=entry.getValue(); } } } } if(value!=null&&(!"".equals(value.toString().trim()))){ for(Class<?>c:writeMethod.getParameterTypes()){ if("java.lang.Integer".equals(c.getName())||"int".equals(c.getName())){ writeMethod.invoke(targetClass,Integer.valueOf(value.toString())); break; } if("java.lang.Long".equals(c.getName())||"long".equals(c.getName())){ writeMethod.invoke(targetClass,Long.valueOf(value.toString())); break; } if("java.lang.Double".equals(c.getName())||"double".equals(c.getName())){ writeMethod.invoke(targetClass,Double.valueOf(value.toString())); break; } if("java.lang.Float".equals(c.getName())||"float".equals(c.getName())){ writeMethod.invoke(targetClass,Float.valueOf(value.toString())); break; } if("java.lang.String".equals(c.getName())){ writeMethod.invoke(targetClass,value.toString()); break; } if("java.math.BigDecimal".equals(c.getName())){ writeMethod.invoke(targetClass,newBigDecimal(value.toString().replaceAll(",",""))); break; } if("java.util.Date".equals(c.getName())&&"java.lang.String".equals(value.getClass().getName())){ Stringdf="yyyy-MM-dd"; if(value.toString().length()>10){ df="yyyy-MM-ddHH:mm:ss"; } writeMethod.invoke(targetClass,AppDateAndStringUtil.parse(value.toString(),df)); break; } try{ writeMethod.invoke(targetClass,value); }catch(Exceptione){ logger.error("generateObjectFromFieldMaperror",e); } break; } } } } returntargetClass; }
}
用户点评