java自定义类写成json_自己写的Json类

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

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值