日期:2014-05-16 浏览次数:20365 次
package com.csu.util; import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; public class CreateJSON { public String createObjToJson(Object obj,String JsonName) { StringBuffer strBuff = new StringBuffer(); //判断items是不是Map类 if(obj instanceof Map<?,?>) { Map myMap = (Map)obj; strBuff.append(this.createMapToJson(myMap, JsonName)); } //判断items对象是不是集合类 else if(obj instanceof Collection<?>) { Collection<?> coList = (Collection<?>)obj; //直接调用相关方法 strBuff.append(this.createByReflect(coList, JsonName)); } //判断items对象是不是数组。 else if(obj.getClass().isArray()) { strBuff.append(this.createArrayToJson(obj, JsonName)); } //否则为普通对象 else { strBuff.append(this.createNomalObjToJson(obj, JsonName)); } return strBuff.toString(); } //如果一个对象不是集合类对象,也不是Map类,也不是数组类型 public String createNomalObjToJson(Object obj,String JsonName) { StringBuffer strBuff = new StringBuffer(); strBuff.append("{"); // 得到该对象的类 Class<?> vo = obj.getClass(); //判断该对象是否为八个数据类型 如果是基本数据类型则直接输出{JsonName:"vo"} if(vo.isPrimitive() || vo == String.class || vo == Integer.class || vo == Float.class || vo == Double.class || vo == Long.class || vo == Byte.class || vo == Short.class || vo == Boolean.class || vo == Character.class) { return "{\"" + JsonName + "\":\"" + vo + "\"}"; } // 得到该对象的所有的字段 Field[] fields = vo.getDeclaredFields(); String methodName = null; String fieldName = null; for (int i = 0; i < fields.length; i++) { // 得到字段名 fieldName = fields[i].getName(); // 得到该字段的数据类型 Class<?> fieldType = fields[i].getType(); // 得到该字段的get方法的方法名 methodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); Method method = null; Object fieldValue = null; try { method = vo.getMethod(methodName, new Class[] {}); fieldValue = method.invoke(obj); } catch (SecurityException e1) { e1.printStackTrace(); } catch (NoSuchMethodException e1) { e1.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } // 将字段名加到字符串中去 strBuff.append("\""); strBuff.append(fieldName); strBuff.append("\":"); // 判断该字段的数据类型是不是Object类型,是对象类型的话,还得创建该对象的数据,即递归调用本方法 if (!fieldType.isPrimitive() && fieldType != String.class && fieldType != Integer.class && fieldType != Float.class && fieldType != Double.class && fieldType != Long.class && fieldType != Byte.class && fieldType != Short.class && fieldType != Boolean.class && fieldType != Character.class) { if(fieldValue == null) { strBuff.append("{}"); }else { strBuff.append(this.createObjToJson(fieldValue,fieldName)); } } else { strBuff.append("\""); strBuff.append(fieldValue.toString()); strBuff.append("\""); } strBuff.append(","); } strBuff.deleteCharAt(strBuff.length() - 1); strBuff.append("}"); return strBuff.toString(); } //创建一个Map对象的JSON字符串 public String createMapToJson(Map obj,String JsonName) { StringBuffer strBuff = new StringBuffer(); // 如果传过来的数据长度为0则表示没有数据传过来,直接返回一个{"JsonName":[]} if (obj.size() == 0) return "{\"" + JsonName + "\":[]}"; // 否则开始构建字符串 strBuff.append("{\"" + JsonName + "\":["); Set<Map.Entry>