packagecom.qdu.util;importjava.beans.BeanInfo;importjava.beans.IntrospectionException;importjava.beans.Introspector;importjava.beans.PropertyDescriptor;importjava.lang.reflect.Array;importjava.util.ArrayList;importjava.util.Date;importjava.util.List;/*** 自定义Json转换类 转换接口fromObject
*
*@authoryjq
**/
public classJsonUtil {//public static void main(String[] argc) {//int[] intArray = new int[] { 1, 2, 3, 4 };//double[] doubleArray = new double[] { 1.0, 2.0, 3.0 };//LoginForm loginForm = new LoginForm();//loginForm.setUsername("刘易鑫");//loginForm.setPassword("adfasfdasd");//List strList = new ArrayList();//strList.add("1111111111111111");//strList.add("222222222222222222");//strList.add(new Date());//strList.add(loginForm);//
//System.out.println(fromObject(intArray));//System.out.println(fromObject(doubleArray));//System.out.println(fromObject(loginForm));//System.out.println(fromObject(strList));//}
/*** 把Object转为Json字符串
*
*@paramobj
*@return
*/
public staticString fromObject(Object obj) {if (obj == null) {return null;
}
ArrayObjectType type=getObjectType(obj);if(obj.getClass().isArray()) {returnfromArray(obj);
}if (type ==ArrayObjectType.R_List) {returnfromList(obj);
}if (type == ArrayObjectType.R_String) {//字符串
return "\"" + obj.toString() + "\"";
}if (type ==ArrayObjectType.R_Date) {return "\"" + obj.toString() + "\"";//时间
}if (type == ArrayObjectType.R_Value) {//值类型
returnobj.toString();
}returnfromSingleObject(obj);
}/*** 把一个简单类型的转
*
*@return
*/
private staticString fromArray(Object arr) {
StringBuilder sb= newStringBuilder();
ArrayObjectType arrType=getObjectType(arr);
sb.append("[");for (int i = 0; i < Array.getLength(arr); i++) {switch(arrType) {casev_boolean:
sb.append(Array.getBoolean(arr, i));break;casev_char:
sb.append(Array.getChar(arr, i));break;casev_int:
sb.append(Array.getInt(arr, i));break;casev_byte:
sb.append(Array.getByte(arr, i));break;casev_double:
sb.append(Array.getDouble(arr, i));break;casev_long:
sb.append(Array.getLong(arr, i));break;casev_short:
sb.append(Array.getShort(arr, i));break;default:
sb.append(fromSingleObject(Array.get(arr, i)));
}if (i != Array.getLength(arr) - 1)
sb.append(",");
}
sb.append("]");returnsb.toString();
}/*** 把 List转为Json字符串
*
*@paramlist
*@return
*/
private staticString fromList(Object obj) {
StringBuilder sb= newStringBuilder();
sb.append("[");
List> list = (List>) obj;for (int i = 0; i < list.size(); i++) {
String itemJson=fromObject(list.get(i));if (itemJson == null)continue;
sb.append(itemJson);if (i != list.size() - 1) {
sb.append(",");
}
}
sb.append("]");returnsb.toString();
}/*** 单一的Object转成Json字符串 非简单类型,Date等类型
*
*@paramobj
*@return
*/
private staticString fromSingleObject(Object obj) {
StringBuilder sb= newStringBuilder();
sb.append("{");try{
BeanInfo beanInfo=Introspector.getBeanInfo(obj.getClass());for (int i = 0; i < beanInfo.getPropertyDescriptors().length; i++) {
PropertyDescriptor prop=beanInfo.getPropertyDescriptors()[i];
String proName=prop.getName();if (proName.equals("class"))continue;
String itemjson= "";try{if (prop.getReadMethod() == null) {continue;
}
Object propVaule=prop.getReadMethod().invoke(obj);
itemjson=fromObject(propVaule);if (itemjson == null) {//json规定String为空的返回“”,数组为空的返回[],其它不表示
if (prop.getPropertyType().equals(String.class)) {
itemjson= "";
}else if(prop.getClass().isArray()) {
itemjson= "[]";
}
}if (itemjson != null) {
sb.append(String.format("\"%s\":%s", proName, itemjson));if (i != beanInfo.getPropertyDescriptors().length - 1)
sb.append(",");
}
}catch(Exception e) {
e.printStackTrace();continue;
}
}
}catch(IntrospectionException e) {
e.printStackTrace();
}
sb.append("}");returnsb.toString();
}/*** 得到数据类型
*
*@paramarr
*@return
*/
private staticArrayObjectType getObjectType(Object arr) {
String type= "";if (arr == null)returnArrayObjectType.NULL;if(arr.getClass().isArray())
type=arr.getClass().getComponentType().toString();elsetype=arr.getClass().toString();if (type.equals("string") || equalClassAndString(String.class, type)) {returnArrayObjectType.R_String;
}if (type.equals("int")) {returnArrayObjectType.v_int;
}if (type.equals("float")) {returnArrayObjectType.v_float;
}if (type.equals("double")) {returnArrayObjectType.v_double;
}if (type.equals("byte")) {returnArrayObjectType.v_byte;
}if (type.equals("short")) {returnArrayObjectType.v_short;
}if (type.equals("int")) {returnArrayObjectType.v_int;
}if (type.equals("boolean")) {returnArrayObjectType.v_boolean;
}if (type.equals("char")) {returnArrayObjectType.v_char;
}if (type.equals(Date.class.toString())) {returnArrayObjectType.R_Date;
}if (equalClassAndString(ArrayList.class, type)) {returnArrayObjectType.R_List;
}if (equalClassAndString(Integer.class, type)|| equalClassAndString(Float.class, type)|| equalClassAndString(Double.class, type)|| equalClassAndString(Byte.class, type)|| equalClassAndString(Short.class, type)|| equalClassAndString(Long.class, type)) {returnArrayObjectType.R_Value;
}returnArrayObjectType.R_Obj;
}/*** 对比class是否是type
*
*@paramcls
*@paramtype
*@return
*/
private static Boolean equalClassAndString(Class>cls, String type) {returncls.toString().equals(type);
}/*** 数组元素的类型或对象的类型
*
*@authoryjq
**/
enumArrayObjectType {
NULL, R_Obj, R_String, R_Value, R_Date, R_List, v_byte, v_char, v_double, v_int, v_short, v_long, v_boolean, v_float
}
}