欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Object转json字符串,Object转Map,Map转Object 简单源码,jsonobject,publicclassA

来源: javaer 分享于  点击 12944 次 点评:36

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;","&amp;amp;"}, {"<","&amp;lt;"}, {">","&amp;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()&amp;&amp;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()&amp;&amp;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()&amp;&amp;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()&amp;&amp;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()&amp;&amp;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()&amp;&amp;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&amp;&amp;!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&amp;&amp;(!"".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())&amp;&amp;"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; }
}

相关栏目:

用户点评