日期:2014-05-16 浏览次数:20428 次
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>