java model json_JsonUtil JSONObject、JavaBean、Model、list相互转化

package com.XXX.XXX.common.util;

//上面是包路径

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.text.SimpleDateFormat;

import java.sql.Date;

import java.sql.Timestamp;

import java.lang.reflect.InvocationTargetException;

import java.math.BigDecimal;

import java.text.ParseException;

import java.util.List;

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;

public class JsonUtil {

/**

* JSONObject对象转JavaBean

* @param JSONObject

* @param JavaBean的class

* @return 转换结果(异常情况下返回null)

*/

public static Object jsonToBean(JSONObject json,Class cls)

{

Object obj = null;

try

{

obj = cls.newInstance();

// 取出Bean里面的所有方法

Method[] methods = cls.getMethods();

for(int i=0; i < methods.length; i++)

{

// 取出方法名

String methodName = methods[i].getName();

// 取出方法的类型

Class[] clss = methods[i].getParameterTypes();

if(clss.length != 1)

{

continue;

}

// 若是方法名不是以set开始的则退出本次循环

if(methodName.indexOf("set") < 0)

{

continue;

}

// 类型

String type = clss[0].getSimpleName();

String key = methodName.substring(3,4).toLowerCase() + methodName.substring(4);

// 如果map里有该key

if(json.has(key) && json.get(key) != null)

{

setValue(type,json.get(key),methods[i],obj);

}

}

} catch (Exception ex)

{

LogUtil.errorLog(JsonUtil.class,"JSONObject转JavaBean失败",ex);

}

return obj;

}

/**

* 根据key从JSONObject对象中取得对应值

* @param json

* @param key

* @return

* @throws JSONException

*/

public static String getString(JSONObject json,String key) throws JSONException

{

String retVal = null;

if(json.isNull(key))

{

retVal = "";

}

else

{

retVal = json.getString(key);

}

return retVal;

}

/**

* 给JavaBean的每个属性设值

* @param type

* @param value

* @param method

* @param bean

* @throws IllegalArgumentException

* @throws IllegalAccessException

* @throws InvocationTargetException

* @throws ParseException

*/

private static void setValue(String type,Object value,Method method,Object bean)

{

if(value != null && !"".equals(value))

{

try

{

if("String".equals(type))

{

method.invoke(bean,new Object[] {value});

} else if("int".equals(type) || "Integer".equals(type))

{

method.invoke(bean,new Object[] { new Integer(""+value) });

} else if("double".equals(type) || "Double".equals(type))

{

method.invoke(bean,new Object[] { new Double(""+value) });

} else if("float".equals(type) || "Float".equals(type))

{

method.invoke(bean,new Object[] { new Float(""+value) });

} else if("long".equals(type) || "Long".equals(type))

{

method.invoke(bean,new Object[] { new Long(""+value) });

} else if("int".equals(type) || "Integer".equals(type))

{

method.invoke(bean,new Object[] { new Integer(""+value) });

} else if("boolean".equals(type) || "Boolean".equals(type))

{

method.invoke(bean,new Object[] { Boolean.valueOf(""+value) });

} else if("BigDecimal".equals(type))

{

method.invoke(bean,new Object[] { new BigDecimal(""+value) });

} else if("Date".equals(type))

{

Class dateType = method.getParameterTypes()[0];

if("java.util.Date".equals(dateType.getName()))

{

java.util.Date date = null;

if("String".equals(value.getClass().getSimpleName()))

{

String time = String.valueOf(value);

String format = null;

if(time.indexOf(":") > 0)

{

if(time.indexOf(":") == time.lastIndexOf(":"))

{

format = "yyyy-MM-dd H:mm";

}

else

{

format = "yyyy-MM-dd H:mm:ss";

}

}

else

{

format = "yyyy-MM-dd";

}

SimpleDateFormat sf = new SimpleDateFormat();

sf.applyPattern(format);

date = sf.parse(time);

}

else

{

date = (java.util.Date) value;

}

if(date != null)

{

method.invoke(bean,new Object[] { date });

}

}

else if("java.sql.Date".equals(dateType.getName()))

{

Date date = null;

if("String".equals(value.getClass().getSimpleName()))

{

String time = String.valueOf(value);

String format = null;

if(time.indexOf(":") > 0)

{

if(time.indexOf(":") == time.lastIndexOf(":"))

{

format = "yyyy-MM-dd H:mm";

}

else

{

format = "yyyy-MM-dd H:mm:ss";

}

}

else

{

format = "yyyy-MM-dd";

}

SimpleDateFormat sf = new SimpleDateFormat();

sf.applyPattern(format);

date = new Date(sf.parse(time).getTime());

}

else

{

date = (Date) value;

}

if(date != null)

{

method.invoke(bean,new Object[] { date });

}

}

} else if("Timestamp".equals(type))

{

Timestamp timestamp = null;

if("String".equals(value.getClass().getSimpleName()))

{

String time = String.valueOf(value);

String format = null;

if(time.indexOf(":") > 0)

{

if(time.indexOf(":") == time.lastIndexOf(":"))

{

format = "yyyy-MM-dd H:mm";

}

else

{

format = "yyyy-MM-dd H:mm:ss";

}

}

else

{

format = "yyyy-MM-dd";

}

SimpleDateFormat sf = new SimpleDateFormat();

sf.applyPattern(format);

timestamp = new Timestamp(sf.parse(time).getTime());

}

else

{

timestamp = (Timestamp) value;

}

if(timestamp != null)

{

method.invoke(bean,new Object[] { timestamp });

}

} else if("byte[]".equals(type))

{

method.invoke(bean,new Object[] { new String(""+value).getBytes() });

}

} catch(Exception ex)

{

LogUtil.errorLog(JsonUtil.class,"JSONObject赋值给JavaBean失败",ex);

}

}

}

/**

* 将Model转换成JSONObject

*/

@SuppressWarnings("unchecked")

public static JSONObject coverModelToJSONObject(Object o) throws Exception{

JSONObject json = new JSONObject();

Class clazz = o.getClass();

Field [] fields = clazz.getDeclaredFields();

for(int i=0; i< fields.length; i++){

Field f = fields[i];

json.put(f.getName(),invokeMethod(clazz,f.getName(),o));

}

return json;

}

/**

* 将list转换成JSONArray

*/

public static JSONArray coverModelToJSONArray(List list) throws Exception{

JSONArray array = null;

if(list.isEmpty()){

return array;

}

array = new JSONArray();

for(Object o : list){

array.put(coverModelToJSONObject(o));

}

return array;

}

@SuppressWarnings("unchecked")

private static Object invokeMethod(Class c,String fieldName,Object o){

String methodName = fieldName.substring(0,1).toUpperCase()+ fieldName.substring(1);

Method method = null;

try {

method = c.getMethod("get" + methodName);

return method.invoke(o);

}

catch (Exception e) {

LogUtil.errorLog(e);

return "";

}

}

}

相关文章

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值