Object转json字符串,Object转Map,Map转Object 简单源码
发布时间:2020-05-25 16:01:18 所属栏目:Java 来源:互联网
导读:Object转json字符串,Object转Map,Map转Object 简单源码
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 public class AppObjectUtil {private static final Logger logger = LoggerFactory.getLogger(AppObjectUtil.class); private static final String CLASSNAME = AppObjectUtil.class.getName(); private static final String JSON__PROPERTY_FILE = CLASSNAME; private static final String ESCAPE_JSON_RESPONSE = "escapeJSONResponse"; private static Boolean iCrossSiteScriptingEnabled = null; private static Boolean isEscapeNull = false; private static final String lineSeparator = System.getProperty("line.separator");; private final static String[][] ESCAPE_CHARACTERS = { {"\","\\"}, {""","\""}, {"n","\n"}, {"r","\r"}, {"t","\t"}, {"f","\f"}, // 根据http://www.json.org/上说明不必过滤一下字符 //{"'","\'"}, }; private final static String[][] CROSS_SITE_SCRIPTING_CHARACTERS = { {"&","&"}, {"<","<"}, {">",">"}, }; private static Set<Object> iProcessedObjects; /** * <p>Title: </p> * <p>Description:构造器 </p> */ public AppObjectUtil() { super(); } /** * @Title: objectToJson * @Description: 把对象转换成json格式的数据 * @param object * @return */ public static String toJson(Object object,String dateFormat){ StringBuilder sb=new StringBuilder(); try { iProcessedObjects = new HashSet<Object>(); outputAsJson(sb,"",object,dateFormat); } catch (Exception e) { logger.error("toJson error",e); } return sb.toString(); } public static String toJson(Object object){ StringBuilder sb=new StringBuilder(); try { iProcessedObjects = new HashSet<Object>(); outputAsJson(sb,object); } catch (Exception e) { logger.error("toJson error",e); } return sb.toString(); } /** * @Title: outputAsJson * @Description: 返回json格式的数据 * @param sb 返回json数据到StringBuilder对象中 * @param indent 当前indent * @param object 需要转换成json格式的对象 * @throws Exception */ private static void outputAsJson(StringBuilder sb,String indent,Object object,String dateFormat) throws Exception { if (object == null) { if(getIsEscapeNull()){ return; } sb.append("null"); }else if(object instanceof Date){ Date date=(Date)object; sb.append(quote(AppDateAndStringUtil.format(date,dateFormat))); } else if (iProcessedObjects.contains(object) || object instanceof String || object instanceof Character || object instanceof Class || object instanceof Throwable) { sb.append(quote(object)); }else if (object instanceof Boolean || object instanceof Number) { sb.append(object.toString()); }else if (object instanceof Map) { iProcessedObjects.add(object); Map<?,?> map = (Map<?,?>) object; if (map.size() == 0) { sb.append("{}"); }else { sb.append("{"); Iterator<?> keys = map.keySet().iterator(); int i=0; while (keys.hasNext()) { Object key = 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); }else if (object.getClass().isArray()) { iProcessedObjects.add(object); int length = Array.getLength(object); if (length == 0) { sb.append("[]"); }else if (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("["); int k=0; for (int i = 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,i),dateFormat); } sb.append(lineSeparator); sb.append(indent); sb.append("t"); sb.append("]"); } iProcessedObjects.remove(object); }else if (object instanceof Collection) { iProcessedObjects.add(object); outputAsJson(sb,((Collection<?>)object).toArray(),dateFormat); iProcessedObjects.remove(object); }else { iProcessedObjects.add(object); try { PropertyDescriptor properties[] = Introspector.getBeanInfo(object.getClass()).getPropertyDescriptors(); Map<Object,Object> map = new HashMap<Object,Object>(properties.length); for (int i = 0; i < properties.length; i++) { Method readMethod = properties[i].getReadMethod(); if (readMethod != null) { boolean isContinue=false; for(Field field: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(),(Object[])null)); } } } outputAsJson(sb,map,dateFormat); iProcessedObjects.remove(object); }catch (InvocationTargetException e) { logger.error("outputAsJson error",e); throw e; }catch (IllegalAccessException e) { logger.error("IllegalAccessException error",e); throw e; }catch (IntrospectionException e) { logger.error("IntrospectionException error",e); throw e; } } } private static void outputAsJson(StringBuilder sb,Object object) throws Exception { if (object == null) { if(getIsEscapeNull()){ return; } sb.append("null"); }else if (iProcessedObjects.contains(object) || object instanceof String || object instanceof Date || object instanceof Character || object instanceof Class || object instanceof Throwable) { sb.append(quote(object)); }else if (object instanceof Boolean || object instanceof Number) { sb.append(object.toString()); }else if (object instanceof Map) { iProcessedObjects.add(object); Map<?,map.get(key)); } sb.append(lineSeparator); sb.append(indent); sb.append("}"); } iProcessedObjects.remove(object); }else if (object.getClass().isArray()) { iProcessedObjects.add(object); int length = Array.getLength(object); if (length == 0) { sb.append("[]"); }else if (length == 1) { sb.append("["); if(getIsEscapeNull()&&Array.get(object,0)); } sb.append("]"); }else { sb.append("["); int k=0; for (int i = 0; i < length; i++) { if(getIsEscapeNull()&&Array.get(object,i)); } sb.append(lineSeparator); sb.append(indent); sb.append("t"); sb.append("]"); } iProcessedObjects.remove(object); }else if (object instanceof Collection) { iProcessedObjects.add(object); outputAsJson(sb,((Collection<?>)object).toArray()); iProcessedObjects.remove(object); }else { iProcessedObjects.add(object); try { PropertyDescriptor properties[] = Introspector.getBeanInfo(object.getClass()).getPropertyDescriptors(); Map<Object,map); iProcessedObjects.remove(object); }catch (InvocationTargetException e) { logger.error("InvocationTargetException error",e); throw e; } } } /** * @Title: quote * @Description: 替换掉特殊字符为html识别的字符 * @param object * @return */ private static String quote(Object object) { String str = object.toString(); for (int i = 0; i < ESCAPE_CHARACTERS.length; i++) { str = str.replaceAll(ESCAPE_CHARACTERS[i][0],ESCAPE_CHARACTERS[i][1]); } if (AppObjectUtil.isCrossSiteScriptingEnabled()) { for (int i=0; i < CROSS_SITE_SCRIPTING_CHARACTERS.length; i++) { str = str.replaceAll(CROSS_SITE_SCRIPTING_CHARACTERS[i][0],CROSS_SITE_SCRIPTING_CHARACTERS[i][1]); } } StringBuffer sb = new StringBuffer(str.length() + 2); sb.append("""); sb.append(str); sb.append("""); String result = sb.toString(); return result; } /** * 这个方法是检查是否支持json对于script的站点跨域问题 * @return true 如果支持json对于script的跨域. */ private static boolean isCrossSiteScriptingEnabled() { if (iCrossSiteScriptingEnabled == null) { iCrossSiteScriptingEnabled = new Boolean(true); try { ResourceBundle bundle = ResourceBundle.getBundle(JSON__PROPERTY_FILE); String escapeJSONResponse = (String) bundle.getObject(ESCAPE_JSON_RESPONSE); iCrossSiteScriptingEnabled = new Boolean(escapeJSONResponse); } catch (MissingResourceException e) { logger.error("MissingResourceException error",e); } } return iCrossSiteScriptingEnabled.booleanValue(); } /** * @Title: sqlStrToSqlQueryString * @Description: 把sql字符串按行解析并生成合法SQL语句 * @param sqlStr * @return * @throws IOException */ public static String sqlStrToSqlQueryString(String sqlStr) throws IOException { if(sqlStr==null){ return null; } BufferedReader reader = new BufferedReader(new StringReader(sqlStr)); String line = null; StringBuffer queryBuffer = null; while ((line = reader.readLine()) != null) { if (queryBuffer == null) { queryBuffer = new StringBuffer(); } if (line.length() > 0 && !line.startsWith("--")) { queryBuffer.append(line).append(" "); if (line.lastIndexOf(";") !=line.length()-1) { continue; }else{ return queryBuffer.substring(0,queryBuffer.length()-2); } } } if(queryBuffer==null){ return sqlStr; } return queryBuffer.substring(0,queryBuffer.length()-1); } /** * @return the isEscapeNull */ public static Boolean getIsEscapeNull() { return isEscapeNull; } /** * @param isEscapeNull the isEscapeNull to set */ public static void setIsEscapeNull(Boolean isEscapeNull) { AppObjectUtil.isEscapeNull = isEscapeNull; } /** * @Title: generateFieldMapFromObject * @param targetClass * @return * @throws Exception */ public static Map<String,Object> generateFieldMapFromObject(Object targetClass)throws Exception{ if (targetClass == null) { return null; } Map<String,Object> fieldMap=null; PropertyDescriptor properties[] = Introspector.getBeanInfo(targetClass.getClass()).getPropertyDescriptors(); for (int i = 0; i < properties.length; i++) { Method readMethod = properties[i].getReadMethod(); if (readMethod != null) { if(fieldMap==null){ fieldMap=new HashMap<String,Object>(); } boolean isContinue=false; for(Field field: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 (Exception e) { } } } } return fieldMap; } /** * @param targetClass * @param fieldMap * @return * @throws Exception */ public static Object generateObjectFromFieldMap(Object targetClass,Map<String,Object> fieldMap) throws Exception { if (targetClass == null) { return null; } Class<?> objectClass = null; if (targetClass instanceof Class) { objectClass = (Class<?>) targetClass; targetClass = objectClass.newInstance(); } else { objectClass = targetClass.getClass(); } PropertyDescriptor properties[] = Introspector.getBeanInfo(objectClass).getPropertyDescriptors(); for (int i = 0; i < properties.length; i++) { Method writeMethod = properties[i].getWriteMethod(); if (writeMethod != null) { Object value=null; for(Field field: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) { String setMethodName = "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,new BigDecimal(value.toString().replaceAll(",",""))); break; } if("java.util.Date".equals(c.getName())&&"java.lang.String".equals(value.getClass().getName())){ String df = "yyyy-MM-dd"; if(value.toString().length()>10){ df = "yyyy-MM-dd HH:mm:ss"; } writeMethod.invoke(targetClass,AppDateAndStringUtil.parse(value.toString(),df)); break; } try { writeMethod.invoke(targetClass,value); } catch (Exception e) { logger.error("generateObjectFromFieldMap error",e); } break; } } } } return targetClass; } } 以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – Spring 3.1:DataSource没有自动连接到@Configurat
- Java中的泛型(和通配符)
- java – 多个枚举与一个枚举
- java – 在年份值的上下文中,“aaaa”与“yyyy”有何不同?
- java – 与Ant的System.out
- java-在Hibernate中,当有EAGER JOIN时,StatelessSession是否
- 在DialogFragment中使用java – getContentResolver()和get
- 利用HttpUrlConnection 上传 接收文件的实现方法
- java web将数据导出为Excel格式文件代码片段
- javafx-2 – JavaFX中的内部框架
