自己写的json转java bean工具类
2017-01-09 20:47
218 查看
前言
用json-lib自带的toBean感觉不太好用,对于复杂的嵌套会报错,会报错:MorphDynaBean cannot be cast to ** 故自己尝试写一下。记录
对Date、short类型的转换存在问题,暂时不管了
代码
public static <T> T json2Bean(JSONObject json, Class<T> clazz) throws Exception { T t = clazz.newInstance(); Method[] methods = clazz.getDeclaredMethods(); if (methods == null || methods.length == 0) return null; for (Method method : methods) { String methodName = method.getName(); if (methodName.startsWith("set")) { StringBuffer fieldName = new StringBuffer(); // 形参类型:String long Product boolean double short int String List Class<?> ParamClazz = method.getParameterTypes()[0]; // 通过set的method拿到字段名称name time delFlag birth price price2 age fieldName.append(methodName.substring(3, 4).toLowerCase())// 字段首字母小写 .append(methodName.substring(4)); if (!json.has(fieldName.toString())) { continue; } // 常用基本类型 不含short,Date(支持String类型的 日期) if (ParamClazz == boolean.class || ParamClazz == Boolean.class) { method.invoke(t, new Object[] { json.optBoolean(fieldName.toString(), false) }); } else if (ParamClazz == int.class || ParamClazz == Integer.class) { method.invoke(t, new Object[] { json.optInt(fieldName.toString(), 0) }); } else if (ParamClazz == long.class || ParamClazz == Long.class) { method.invoke(t, new Object[] { json.optLong(fieldName.toString(), 0) }); } else if (ParamClazz == double.class || ParamClazz == Double.class) { method.invoke(t, new Object[] { json.optDouble(fieldName.toString(), 0) }); } else if (ParamClazz == String.class) { method.invoke(t, new Object[] { json.optString(fieldName.toString(), "") }); }else if(ParamClazz == Date.class){ method.invoke(t, new Object[] { json.optString(fieldName.toString(),"") }); }else if (List.class.isAssignableFrom(ParamClazz)) {//解析jsonArray为list JSONArray array = json.getJSONArray(fieldName.toString()); List list = new ArrayList<>(); for(int i =0;array!=null && i<array.size();i++){ JSONObject jsonobj = array.getJSONObject(i); Class<?> listType = (Class<?>) ((ParameterizedType) clazz // 获取List的泛型类型 .getDeclaredField(fieldName.toString()).getGenericType()) .getActualTypeArguments()[0]; Object obj = json2Bean(jsonobj, listType); list.add(obj); } method.invoke(t,list); } else {//jsonObject和无法解析字段的判断 try{ JSONObject getjsonObj = json.getJSONObject(fieldName.toString()); Object obj = json2Bean(getjsonObj, ParamClazz); method.invoke(t, obj); }catch(JSONException e){ e.printStackTrace(); continue; } } } } return t; }
相关文章推荐
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象
- json数据与JAVA数据的转换 jsonJavaBean.netApache 自己编写了一个工具类,处理页面提交json格式数据到后台,再进行处理成JAVA对象数据 1、DTO:Data T
- 工具类:解析json格式java bean,List<bean>
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象[修订081217]
- 自己动手用JAVA编写JSON工具类
- 自己封装Jackson的工具类——JsonUtil
- java bean 转为JSON,不依赖于其它第三方库的工具类
- 自己写的JSON 工具类,封装一些常用的方法
- 自己封装的json工具类
- 使用反射封装自己的工具类MyBeanUtils
- 通过GSON 解析Json数据,但是不创建JAVA Bean的方式,获取对应的值
- 工具类之json处理
- IP工具类-自己动手做个ip解析器
- 自己整理安卓工具类大集合,DensityUtils
- 将一个对象转化为类json风格字符串的工具类
- FastJSON工具类测试
- 自己实现的JDBC工具类
- Json工具类
- Json相关工具类