json转成java对象
2015-08-18 11:24
435 查看
avro生成的代码里,String是CharSequence,不能通过Gson反序列化,于是有了下面的代码,ParseArray里还不完善:
static <T> List<T> parseArray(JSONArray arrary,Class<?> cls) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException, InstantiationException, ClassNotFoundException{ List<T> result = new ArrayList<T>(); String className = cls.getName(); for(int i=0;i<arrary.length();i++){ if(className.contains("java.lang")){ if(className.equals("java.lang.CharSequence") || className.equals("java.lang.String")) { result.add((T) arrary.getString(i)); }else if(className.equals("java.lang.Double")) { result.add((T) ((Double)arrary.getDouble(i))); } else if(className.equals("java.lang.Integer")) { result.add((T) ((Integer)arrary.getInt(i))); } else if(className.equals("java.lang.Boolean")) { result.add((T) ((Boolean)arrary.getBoolean(i))); } }else{ // 解析对象 result.add((T)json2Bean(arrary.getJSONObject(i),cls)); } } return result; } public static <T> T json2Bean(JSONObject jsonObject, Class<?> cls) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException, InstantiationException, ClassNotFoundException { // if (item == null) { // return null; // } T item = (T) cls.newInstance(); Field[] fields = cls.getDeclaredFields(); for (Field field : fields) { String varName = field.getName(); if (jsonObject.has(varName)) { Object value = jsonObject.get(varName); Class<?> currentClass = field.getType(); if(currentClass.equals(List.class)){ JSONArray array = (JSONArray)value; String subClassName = field.getGenericType().toString().replace("java.util.List<", ""); subClassName = subClassName.substring(0,subClassName.length()-1); // System.out.println(subClassName); Class<?> clasz = Class.forName(subClassName); // System.out.println(z.getClass()); BeanUtils.setProperty(item, varName, parseArray(array ,clasz)); }else{ if(value instanceof JSONObject){ BeanUtils.setProperty(item, varName, json2Bean((JSONObject)value,currentClass)); }else{ if(value instanceof JSONNull){ value = null; } BeanUtils.setProperty(item, varName, value); } } }else{ // 设置默认值 //BeanUtils.setProperty(item, varName, null); } } return item; }
相关文章推荐
- java对象转化为JSON格式
- java:类和继承
- 创建一个Spring的HelloWorld程序
- java系统学习(二) --------java程序设计中的流程控制
- Java验证码生成类
- java系统学习(二) --------java程序设计中的流程控制
- 什么是java线程的中断(转)
- java接口和抽象类
- Java中的super()研究
- java 类集框架总结
- Spring整合Mybatis
- Java中Model1和Model2
- java - MD5Util
- 时间工具类积累
- 邻接表有向图 之 Java详解
- Spring事务隔离级别及设置
- java时间的获取
- leetcode-173:Binary Search Tree Iterator(Java)
- 【转】JAVA的动态代理
- leetcode-173:Binary Search Tree Iterator(Java)